Wednesday, October 4, 2017

Tạo viền một phía Swift

Để tạo viền toàn bộ cho chữ hay nút, ta có thể dùng lệnh
la.layer.borderWidth=1
Nhưng nếu chỉ muốn viền một phía nào đó thì hãy tạo một class riêng, copy các dòng sau vào
import Foundation
import UIKit
extensionCALayer {
func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
let border = CALayer()
switch edge {
caseUIRectEdge.Top:
   border.frame = CGRectMake(0, -thickness, CGRectGetWidth(self.frame), thickness)
break
caseUIRectEdge.Bottom:
  border.frame = CGRectMake(0, CGRectGetHeight(self.frame), CGRectGetWidth(self.frame), thickness)
break
caseUIRectEdge.Left:
  border.frame = CGRectMake(-thickness, 0, thickness, CGRectGetHeight(self.frame))
break
caseUIRectEdge.Right:
 border.frame = CGRectMake(CGRectGetWidth(self.frame), 0, thickness, CGRectGetHeight(self.frame))
break
default:
break
        }
border.backgroundColor = color.CGColor;
self.addSublayer(border)
   }
}
Sau đó tại bất cứ class nào muốn có viền tuỳ phía, bạn set các lệnh.
la.layer.addBorder(UIRectEdge.Right, color: UIColor.blackColor(), thickness: 0.5)
la.layer.addBorder(UIRectEdge.Top, color: UIColor.blackColor(), thickness: 0.5)
la.layer.addBorder(UIRectEdge.Bottom, color: UIColor.blackColor(), thickness: 0.5)
la.layer.addBorder(UIRectEdge.Left, color: UIColor.blackColor(), thickness: 0.5)
Thế là đã có các viền tuỳ chọn cho bốn phía, thay đổi độ dày, màu sắc của viền nếu muốn. Có thể dịch chuyển các viền đi dài ngắn thêm một chút nếu bạn thay đổi các chỉ số trong các case của extension.
Còn một cách nữa, nếu muốn viền bên trái.
var border = CALayer()
border.backgroundColor = UIColor.redColor().CGColor
border.frame = CGRect(x: -1, y: 0, width: 1.0, height: la.frame.height)
la.layer.addSublayer(border)
Viền phải, thay dòng thứ 3 thành
border.frame = CGRect(x: la.frame.width, y: 0, width: 1.0, height: la.frame.height)
Viền trên đỉnh, thay dòng thứ 3 thành
border.frame = CGRect(x: -1, y: -1, width: la.frame.width, height: 1)
Viền dưới chân
border.frame = CGRect(x: 0, y: la.frame.height, width: la.frame.width, height: 1)



No comments:

Post a Comment