小编use*_*182的帖子

更新模型层时,CABasicAnimation无法正确设置动画

我目前正在实施一个CABasicAnimation动画CALayer transform属性.现在,虽然我是Core Animation的新手,但我已经能够收集各种博客和文章,例如objc.io,使用经常(错误的)推荐的方法来获取动画以坚持使用是非常糟糕的主意.fillModeremovedOnCompletion动画的属性.这种方法被很多人认为是不好的做法,因为它会在模型​​层和表示层之间产生差异,因此未来对其中一个层的查询可能与用户看到的不匹配.

相反,推荐的动画制作方法是在将动画添加到动画图层的同时更新模型图层.但是,我很难理解这是如何工作的.我的动画很简单,就像这样:

CATransform3D updatedTransform = [self newTransformWithCurrentTransform];
// Location 1
CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
transformAnimation.duration = 1;
transformAnimation.fromValue = [NSValue valueWithCATransform3D:self.layerBeingAnimated.transform]; // Does not work without this.
transformAnimation.toValue = [NSValue valueWithCATransform3D:updatedTransform];
// Location 2
[self.layerBeingAnimated addAnimation:transformAnimation forKey:kTransformAnimationKey];
// Location 3
Run Code Online (Sandbox Code Playgroud)

我已经指出了三个尝试使用代码更新模型层的位置

self.layerBeingAnimated.transform = updatedTransform;
Run Code Online (Sandbox Code Playgroud)

在位置1中,图层向右跳转newTransform并且不动画.在位置2中,图层完全按照我想要的方式从当前变换设置为动画newTransform.在位置3中,图层向右跳转newTransform,跳回到旧变换,从fromValue到newTransform正确动画,然后保持在newTransform.

这是什么交易?更新模型层的正确位置是什么?为什么这三个位置会产生不同的结果?

谢谢!

iphone core-animation core-graphics calayer ios

46
推荐指数
1
解决办法
4490
查看次数

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

我是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 …
Run Code Online (Sandbox Code Playgroud)

core-animation calayer uiview drawrect ios

5
推荐指数
1
解决办法
2335
查看次数

标签 统计

calayer ×2

core-animation ×2

ios ×2

core-graphics ×1

drawrect ×1

iphone ×1

uiview ×1