2016-02-28 2 views
7

Я хочу, чтобы округлить свои правильные углы, но работает только для левых угловUIBezierPath не работает в TopRight углу и BottomRight углу

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

Могу ли я увидеть изображение? – tktsubota

+0

Думаю, вам нужно разместить больше кода, потому что то, что вы разместили в себе, является правильным кодом. – paulvs

ответ

20

Проблема заключается в том, что вы получаете оценки функции представления, прежде чем он был изменен для текущего устройства. Он больше, чем позже, когда он появится на экране, поэтому правая сторона закругленного прямоугольника находится справа от экрана.

Вам необходимо создать path и установить maskLayer.path позже, после того, как вид был изменен, что означает во время или после этапа компоновки цикла запуска. Таким образом, либо подкласс представления, и сделать это в методе layoutSubviews вида, либо сделать это в методе контроллера viewDidLayoutSubviews контроллера вида.

+0

Проницательный, спасибо! – acib708

+0

Спасибо! Я довольно давно задался вопросом, почему левые углы отображаются правильно, но не правильные. – Seishin

1

Если вы пытаетесь установить RoundingCorners for View, которые являются дизайном на Раскадке или Xib, то, пожалуйста, установите угол и MaskLayer.path в метод ниже.

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

Swift 3

Это работает для меня!

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

Вы можете проверить метод "roundCorners" здесь: https://stackoverflow.com/a/41217863/3687902

+0

Это как раз логика для UITableViewCell. Огромное спасибо. Ни один из других методов, которые я пытался, работал. – tuttu47

Смежные вопросы