我是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
是实现这一目标的方法。
非常感谢您对此的任何帮助!
答案 0 :(得分:0)
你可以这样做,但是使用形状图层可能会更干净,更快。形状图层使用Core Animation具有内置动画支持。
通常更快地避免实现drawRect,而是让系统为您绘制。