【发布时间】:2014-04-17 17:11:42
【问题描述】:
我是 iOS UIView 绘图的新手,我真的在尝试以标准方式实现自定义 UIView 类。
我现在正在处理的UIView 类很简单:它主要具有形成复合形状的静态背景形状。我还想为这个UIView 类添加动画,这样一个简单的形状就可以在静态形状之上为其路径设置动画。
我目前是如何实施的
现在,我正在UIView 子类的drawRect: 方法中实现静态绘图。这工作正常。我还没有实现单个形状的动画。
我希望得到的答案
问题 1:
像我目前正在做的那样,在drawRect: 方法中绘制静态形状是否更好,或者将所有绘制的形状重构到类扩展范围的CAShapeLayer 属性和做类似的事情:
-(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;
}
问题 2:
无论我将静态形状实现为CAShapeLayers 还是在drawRect: 中,都是为这个UIView 实现可动画形状的最佳方式,一个CAShapeLayer 属性将被实现为另一个CAShapeLayers多于?仅为一个动画形状创建一个完全独立的 UIView 类并将其作为子视图添加到该视图中似乎很愚蠢,所以我认为 CAShapeLayer 是实现这一目标的方法。
我将非常感谢任何帮助!
【问题讨论】:
标签: ios uiview core-animation calayer drawrect