2016-02-28 23 views
7

tôi muốn làm tròn góc phải của tôi, nhưng chỉ hoạt động cho góc tráiUIBezierPath không hoạt động trong topright góc và BottomRight góc

let path = UIBezierPath(roundedRect: view.bounds, byRoundingCorners: [UIRectCorner.TopLeft, UIRectCorner.TopRight], cornerRadii: CGSizeMake(20.0, 20.0)) 
let maskLayer = CAShapeLayer() 
    maskLayer.path = path.CGPath 
    view.layer.mask = maskLayer 
    view.layer.masksToBounds = true 
+0

Tôi có thể nhìn thấy một hình ảnh? – tktsubota

+0

Tôi nghĩ bạn cần đăng thêm mã bởi vì những gì bạn đăng trong chính nó là mã đúng. – paulvs

Trả lời

20

Vấn đề là bạn đang nhận giới hạn của cái nhìn trước khi nó được thay đổi kích cỡ cho thiết bị hiện tại. Nó lớn hơn nó sẽ xuất hiện sau khi nó xuất hiện trên màn hình, vì vậy phía bên phải của hình tròn được làm tròn của bạn nằm ở bên phải màn hình.

Bạn cần tạo path và đặt maskLayer.path sau, sau khi chế độ xem đã được thay đổi kích thước, có nghĩa là trong hoặc sau giai đoạn bố trí của vòng lặp chạy. Vì vậy, hãy phân lớp chế độ xem và thực hiện theo phương thức layoutSubviews của chế độ xem hoặc thực hiện theo phương pháp viewDidLayoutSubviews của bộ điều khiển chế độ xem.

+0

Insightful, cảm ơn bạn! – acib708

+0

Cảm ơn bạn! Tôi đã tự hỏi một thời gian khá lý do tại sao các góc trái được trả lại chính xác nhưng không phải là những cái đúng. – Seishin

1

Nếu bạn đang cố gắng đặt RoundingCorners cho Chế độ xem được thiết kế trên Bảng phân cảnh HOẶC Xib thì vui lòng đặt góc và MaskLayer.path vào phương thức bên dưới.

override func viewDidLayoutSubviews() { 
// here you can write the code... 
    } 
7

Swift 3

Nó làm việc cho tôi!

override func layoutSubviews() { 
    super.layoutSubviews() 
    DispatchQueue.main.async { 
     self.containerView.roundCorners(corners: [.topRight,.topLeft], radius: 25) 
     self.containerView.layer.masksToBounds = true 
    } 
    self.layoutIfNeeded() 
} 

Bạn có thể kiểm tra các phương pháp "roundCorners" ở đây: https://stackoverflow.com/a/41217863/3687902

+0

Đây chính là logic cho một UITableViewCell. Cảm ơn bạn rất nhiều. Không có phương pháp nào khác mà tôi đã thử làm việc. – tuttu47

Các vấn đề liên quan