【发布时间】:2016-10-09 09:54:18
【问题描述】:
我想快速创建一个自定义按钮,结果不太令人满意。 UIBezierpath 未绘制平滑路径。请看下面的图片和代码。
let roundRect = UIBezierPath(roundedRect: CGRectMake(0, 0, 156, 60), byRoundingCorners:.AllCorners, cornerRadii: CGSizeMake(200, 200))
玩了一会儿,我发现将路径向下和向右移动 1 点并将矩形大小缩小 1 可以解决问题。但我不喜欢这种解决方案,我认为这不是正确的做法。我觉得框架正在剪裁我的形象。有人可以帮我解决这个问题吗?
let roundRect = UIBezierPath(roundedRect: CGRectMake(1, 1, 154, 59), byRoundingCorners:.AllCorners, cornerRadii: CGSizeMake(200, 200))
整个 CustomButton 子类:
import UIKit
class DesignableButtons: UIButton {
let black = UIColor(red: 33/255, green: 33/255, blue: 33/255, alpha: 1.0) /* #212121 */
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
self.setTitle("Go to Google", forState: UIControlState.Normal)
self.titleLabel!.font = UIFont(name: "GT Walsheim", size: 14)
self.setTitleColor(black, forState: .Normal)
self.setTitleColor(UIColor.whiteColor(), forState: .Highlighted)
self.setTitleColor(UIColor.whiteColor(), forState: .Selected)
self.titleLabel!.alpha = 1.0
}
let roundRect = UIBezierPath(roundedRect: CGRectMake(0, 0, 156, 60), byRoundingCorners:.AllCorners, cornerRadii: CGSizeMake(200, 200))
override func drawRect(rect: CGRect) {
black.setStroke()
roundRect.stroke()
if highlighted {
black.setFill()
roundRect.fill()
}
}
override var highlighted: Bool {
didSet {
setNeedsDisplay()
}
}
}
【问题讨论】:
-
你能把你所有的绘图代码贴出来吗?另外,这会在物理设备上重现吗?如果您没有放大到 100%,有时会在模拟器上发生这种情况。
-
是的,同样的事情也发生在我的物理 iphone6 上。
-
override func drawRect否。不允许为 UIButton 覆盖drawRect。你需要构建一个背景图片并设置按钮的背景图片,让它以自己的方式进行绘制。
标签: ios swift uibezierpath