这是通过UI扩展方法
extension UIView {
func roundCorners(corners:UIRectCorner, radiusWidth: CGFloat,radiusHeight: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radiusWidth/2, height: radiusHeight/2))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
}}
通过这种扩展方法,我想在viewdidload
上使用此代码制作带圆角的按钮 btnRideNow.roundCorners(corners: [.topRight], radiusWidth: btnRideNow.frame.width,radiusHeight: btnRideNow.frame.height )
btnRideLater.roundCorners(corners: [.topLeft], radiusWidth: btnRideLater.frame.width,radiusHeight: btnRideLater.frame.height )
但是在iPhone 5上我得到了这个结果 ScreenShot
你可以看到左键无法正常渲染,但在iPhone 6中,这项工作正常吗?
答案 0 :(得分:1)
如果您想要圆角,您可以轻松完成:
view.layer.cornerRadius
如果你想要一个边框,你可以做
view.layer.borderWidth
和颜色
view.layer.borderColor
答案 1 :(得分:1)
这完全是时间问题。
如果您过早致电roundCorners
,例如在viewDidLoad
中,按钮frame
和bounds
可能尚未最终确定。但是您的roundCorners
取决于bounds
,因此如果您添加了掩码并且按钮是,那么会因布局而调整大小,您将会自然会得到错误的结果。
答案 2 :(得分:0)
这是一个与IB一起使用的简单子类。您应该能够轻松地根据您的需求进行调整:
@IBDesignable
public class Button: UIButton {
@IBInspectable public var borderColor:UIColor? {
didSet {
layer.borderColor = borderColor?.cgColor
}
}
@IBInspectable public var borderWidth:CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable public var cornerRadius:CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
}
现在,如果你想简单地编写代码,你就得到了大部分答案。一个完整的圆圈:
view.layer.cornerRadius = view.frame.height / 2
如果它是方形的,你可以使用宽度。但就像@Matt说的那样(他的非常好),小心这样做之后你正确设置了框架/边界!