iOS自定义UIView绘图 - CAShapeLayers还是drawRect?

时间:2014-04-17 17:11:43

标签: ios uiview core-animation calayer drawrect

我是iOS UIView绘图新手,我真的想以标准方式实现自定义UIView课程。

我现在正在处理的UIView课程很简单:它主要是静态背景形状,形成复合形状。我还想为这个UIView类添加动画,这样一个简单的形状就可以在静态形状的顶部为它的路径设置动画。

我目前如何实施

现在,我正在drawRect:子类的UIView方法中实现静态绘图。这很好用。我还没有实现单一形状的动画。

我希望得到的回答

问题1:

使用drawRect:方法绘制的静态形状是否更好,因为我目前正在这样做,或者重构所有被绘制到class-extension-scoped中的形状有什么好处{ {1}}属性并执行以下操作:

CAShapeLayer

问题2: 无论我是将静态形状实现为-(instancetype) initWithFrame:(CGRect) frame { if (self = [super initWithFrame:frame]) { [self setupView]; } return self; } -(void) setupView // Allocate, init, and setup one-time layer properties like fill colorse. { self.shapeLayer1 = [CAShapeLayer layer]; [self.layer addSubLayer:shapeLayer1]; self.shapeLayer2 = [CAShapeLayer layer]; [self.layer addSubLayer:shapeLayer2]; // ... and so on } -(void) layoutSubviews // Set frames and paths of shape layers here. { self.shapeLayer1.frame = self.bounds; self.shapeLayer2.frame = self.bounds; self.shapeLayer1.path = [UIBezierPath somePath].CGPath; self.shapeLayer2.path = [UIBezierPath somePath].CGPath; } 还是CAShapeLayers,都是实现此drawRect: UIView属性的可动画形状的最佳方式。其他CAShapeLayer将在上面实施?为一个动画形状创建一个完整的单独CAShapeLayer类并将其作为子视图添加到此视图中似乎很愚蠢,所以我认为UIView是实现这一目标的方法。

非常感谢您对此的任何帮助!

1 个答案:

答案 0 :(得分:0)

你可以这样做,但是使用形状图层可能会更干净,更快。形状图层使用Core Animation具有内置动画支持。

通常更快地避免实现drawRect,而是让系统为您绘制。