override func viewDidLoad() {
let view = self.view as! AccordionView!
view.launchInitializationAnimations()
}
笔者认为:
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
for var i = 0; i < self.accordions.count; ++i {
var layer = AccordionLayer(accordion: self.accordions[i])
layer.accordion = self.accordions[i]
layer.frame = CGRectMake(0, CGFloat(i) * self.getDefaultHeight(), self.frame.width, self.getDefaultHeight())
self.layer.addSublayer(layer)
layer.setNeedsDisplay()
layers.append(layer)
}
}
func launchInitializationAnimations() {
for layer in self.layer.sublayers {
var animation = CABasicAnimation(keyPath: "topX")
animation.duration = 2.0
animation.fromValue = CGFloat(0.0)
animation.toValue = CGFloat(200.0)
layer.addAnimation(animation, forKey: "animateTopX")
}
}
在我的子类的CALayer
var topX : Int
init(accordion: (color: CGColorRef!, header: String, subtitle: String, image: UIImage?)!) {
// Some initializations
// ...
super.init()
}
我也实现了needsDisplayForKey
,drawInContext
。
我已经看到了2-3个其他问题,但我无法真正弄清楚它是如何与我自己的特定案例相关的。
为什么CABasicAnimation
试图实例化一个新的(我的自定义)CALayer?
哪一行会引发错误? –
Xcode标记'class AccordionLayer:CALayer {',消息为“线程1:EXC_BAD_INSTRUCTION”。它会在调用'layer.addAnimation(animation,forKey:“animateTopX”)'时立即发生。看起来像'CA :: Layer :: layer_at_time(CA :: Transaction *,double,bool,bool)'会引发错误。 – Tobias
您没有发布该代码。如果你想在某一特定行发生崩溃,这将有助于你发布崩溃的实际代码。 –