gpt4 book ai didi

iOS 自定义 UIView 绘图 - CAShapeLayers 或 drawRect?

转载 作者:可可西里 更新时间:2023-11-01 04:57:51 24 4
gpt4 key购买 nike

我是 iOS 新手 UIView绘图,我真的在尝试实现自定义 UIView以标准方式上课。

UIView我现在正在处理的类很简单:它主要有形成复合形状的静态背景形状。我也想给这个 UIView 添加动画类,以便一个简单的形状可以在静态形状之上为其路径设置动画。

我目前是如何实现的

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

我想要得到的答案

问题 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作为另一个实现的属性 CAShapeLayer上面会实现吗?创建一个整体单独UIView只为一个动画形状添加类并将其作为 subview 添加到此 View 似乎很愚蠢,所以我认为 CAShapeLayer是实现这一目标的方法。

非常感谢任何帮助!

最佳答案

您可以采用任何一种方式,但对所有内容使用形状图层可能会更干净、更快速。形状层具有使用 Core Animation 的内置动画支持。

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

关于iOS 自定义 UIView 绘图 - CAShapeLayers 或 drawRect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23139360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com