- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用 CABasicAnimation
来移动和调整 ImageView 的大小。我希望将 ImageView 添加到 super View 、动画,然后从 super View 中删除。
为了实现这一点,我正在监听我的 CAAnimationGroup
的委托(delegate)调用,并且一旦它被调用,我就会从 super View 中删除 ImageView 。
问题是有时图像在从 super View 中删除之前会在初始位置闪烁。避免这种行为的最佳方法是什么?
CAAnimationGroup *animGroup = [CAAnimationGroup animation];
animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim, opacityAnim, nil];
animGroup.duration = .5;
animGroup.delegate = self;
[imageView.layer addAnimation:animGroup forKey:nil];
最佳答案
当您向图层添加动画时,该动画不会更改图层的属性。相反,系统会创建图层的副本。原始层称为模型层,复制层称为表示层。表示层的属性随着动画的进行而变化,但模型层的属性保持不变。
当您删除动画时,系统会破坏表示层,只留下模型层,然后模型层的属性控制层的绘制方式。因此,如果模型层的属性与表示层属性的最终动画值不匹配,该层将立即重置为动画之前的外观。
要解决这个问题,您需要将模型层的属性设置为动画的最终值,然后然后将动画添加到层中。您希望按此顺序执行此操作,因为更改图层属性可以为该属性添加 隐式 动画,这会与您要显式添加的动画冲突。您要确保显式动画覆盖隐式动画。
那么你是如何做到这一切的呢?基本配方如下所示:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.fromValue = [NSValue valueWithCGPoint:myLayer.position];
layer.position = newPosition; // HERE I UPDATE THE MODEL LAYER'S PROPERTY
animation.toValue = [NSValue valueWithCGPoint:myLayer.position];
animation.duration = .5;
[myLayer addAnimation:animation forKey:animation.keyPath];
我没有使用动画组,所以我不知道您可能需要更改什么。我只是将每个动画分别添加到图层中。
我还发现使用 +[CATransaction setCompletionBlock:]
方法为一个或多个动画设置完成处理程序比尝试使用动画的委托(delegate)更容易。您设置事务的完成 block ,然后添加动画:
[CATransaction begin]; {
[CATransaction setCompletionBlock:^{
[self.imageView removeFromSuperview];
}];
[self addPositionAnimation];
[self addScaleAnimation];
[self addOpacityAnimation];
} [CATransaction commit];
关于Objective-C - CABasicAnimation 在动画后应用更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11515647/
这很奇怪: 我有一个包含旋转的 CALayer 的 View 。使用 transform.rotation.z 键路径上的 CABasicAnimation 来旋转图层。工作正常。 然后,包括该层的
如果有人想尝试此代码,您只需 c+p 文件即可运行 实际上我在下面的代码中有 2 个问题。 1- 我有一个 Timer 和一个 CABasicAnimation,它们都在触发 longPressGes
我有一个 CALayer在 AVMutableComposition淡入,应该在屏幕上停留一段时间然后消失。问题是,它应该在没有动画的情况下消失,但是 CABasicAnimation最短持续时间为
我有一个在多个图层上执行的 CABasicAnimation,它所做的就是将 UIImageView 向上移动 10 像素,然后向下移动。我希望这种情况能够无限持续下去。当动画完成后,我不知道如何让它
很多人都在谈论在使用 CABasicAnimation 对象后保留它。 所以通过设置 removedOnCompletion = NO 当动画完成时,动画对象保持附加到图层。在不创建新的 CABasi
我有一个基本的 iPhone 旋转动画。有什么方法可以“暂停”动画以便保持 View 的位置吗?我想这样做的一种方法是使动画“完成”而不是调用“删除”,我该怎么做? CABasicAnimation*
我想在动画 (CABasicAnimation) 完成之前将其删除。 例如: 在我的代码中,我启动了针从旋转值 0 到目标值 5 的动画。当针达到旋转值 3 时如何停止动画? CALayer* lay
我希望图层的行为如下: 相反,它的行为如下: 卡片翻转动画是由在 CAAnimationGroup 中应用的两个 CABasicAnimation 创建的。发生不正确的旋转效果是因为 CALayer
通过下面的代码,我可以从左到右为 CALayer 制作动画 let imageLayer = CALayer() imageLayer.frame = CGRect(x: 0, y: 500, wid
所以基本上我正在尝试创建dialogView。该对话框 View 将包含一个加载微调器和一些将根据状态进行更新的文本。我按照两个指南使用 CAShapeLayer 绘制一个圆,然后为它周围的一条线设置
无论我是否使用 CATransation,我似乎都无法控制简单核心动画的持续时间。 事务完成代码在我的持续时间设置后触发,就像我期望的那样,但旋转动画总是需要大约 0.5 秒,无论它设置为什么持续时间
我正在尝试使用 CABasicAnimation 创建一个简单的动画,它将始终保持恒定的速度,即使动画必须移动的距离永远不会相同。到目前为止,这是我的代码,它正在滚动一个大小总是不同的标签,但还不能保
我有描边动画: - (void)drawBezierAnimate:(BOOL)animate { UIColor* color = [UIColor colorWithRed: 1 green: 0
以下代码指向内存分配泄漏(使用分析器中的分配工具)-有人可以指出为什么 -我正在使用 CABAsicAnimation 来旋转 UIImageView -(void)SetGaugeToValueIn
我有一个圆圈,我将其设置为向外生长并变大的动画。不幸的是,尽管我设置了 anchorPoint 它并没有从中心向外动画,它似乎锁定了左上角的位置。这是怎么回事? 请看这张描述圆圈偏离中心的图片 代码
我有 3 个颜色条的 3 个 CABasicAnimation,它们相互跟随。第三个完成后,3 个小节将停留在其最终位置。到这里为止,一切都很好,这是代码: - (void)animationDidS
我正在旋转一个 UIBarButtonItem。动画效果很好。但是,当我从服务器接收到数据时,我想顺利地停止动画。 我尝试使用 presentationLayer 捕获当前值,但我得到的只是 0。 -
我有以下代码,应该提供 View “摇晃”的效果,然后通过向上滑出屏幕来消除它。 有时完美呈现,但大多数时候摇动动画不会显示, View 只是向上滑动。我无法弄清楚问题可能是什么: CABasicAn
我正在实现彩色动画。 我想把黑色变成渐变色。 我搜索了一些方法,可以使用CAGradientLayer定义渐变颜色,CABasicAnimation可以实现颜色变化动画。 但是我在下面的代码中实现,一
我有一个带有 .fromValue 和 .toValue 的 CABasicAnimation,它们在包含 202 个图像的 PNG 图像中移动,并按顺序显示它们一个 我还使用CALayer来保存im
我是一名优秀的程序员,十分优秀!