【发布时间】:2014-11-15 12:07:48
【问题描述】:
我目前正在学习如何实现自定义控件。我不可避免地偶然发现了 CALayer 的可能性,因为当需要执行复杂的动画时,使用 UIImage 不够灵活。
我想将 UIView 用作 CALayer 的“容器”,以便它的宽度和高度始终与 UIView 相同(出于灵活性目的)。
我继承了 CALayer 并覆盖了 drawInContext() 方法。
这是我在屏幕上看到的结果:
绘图看起来像素化和模糊。我正在使用 PaintCode 为我生成绘图代码。
这是自定义的 CALayer:
class SegmentActive: CALayer {
func frameSetup() -> CGRect {
let frameWidth:CGFloat = superlayer.frame.width
let frameHeight:CGFloat = superlayer.frame.height
let frame = CGRectMake(0, 0, frameWidth, frameHeight)
println("\(superlayer.frame.width) // \(superlayer.frame.height)")
return frame
}
override func drawInContext(ctx: CGContext!) {
UIGraphicsPushContext(ctx)
CalorieCalculatorUI.drawSegControlActiveBase(frameSetup())
UIGraphicsPopContext()
}
}
我是这样使用它的:
class ViewController: UIViewController {
@IBOutlet weak var leftSegmentUIView: UIView!
override func viewDidLoad() {
let activeSegment:SegmentActive = SegmentActive()
leftSegmentUIView.layer.addSublayer(activeSegment)
activeSegment.frame = activeSegment.frameSetup()
activeSegment.setNeedsDisplay()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我在这里做错了什么? :(
【问题讨论】:
标签: ios ios7 uiview swift calayer