【问题标题】:iOS Custom UIView Drawing - CAShapeLayers or drawRect?iOS 自定义 UIView 绘图 - CAShapeLayers 或 drawRect?
【发布时间】: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


    【解决方案1】:

    无论哪种方式都可以,但对所有内容使用形状图层可能会更清洁、更快。形状图层具有使用核心动画的内置动画支持。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多