ios - CABasicAnimation 以一定距离出现在屏幕外

标签 ios objective-c cabasicanimation

所以我第一次尝试 CABasicAnimation。我正在尝试将它应用到图层上,并且我希望图层从一个点插值到另一个点。我最初设置了一个负的 x 坐标,然后将动画放在无穷大上。它正在工作,但需要几秒钟才能出现在屏幕上。所以应该彻底走到尽头再重新开始。以下是代码

[[self bgImageView] setImage:[UIImage imageNamed:@"bg_dynamicwx_cloudyday_3.jpg"]];
for (CALayer *layer in self.emitterView.layer.sublayers) {
    [layer removeAllAnimations];
}

[self.emitterView.layer removeAllAnimations];
NSArray *subLayers = self.emitterView.layer.sublayers;
for (CALayer *layer in subLayers) {
    [layer removeFromSuperlayer];
}

CALayer *mask = [CALayer layer];
UIImage *layerImg = [UIImage imageNamed:@"2_cloud.png"];
mask.bounds = CGRectMake(self.emitterView.bounds.origin.x, self.emitterView.bounds.origin.y, layerImg.size.width, layerImg.size.height);
mask.contents = (id)layerImg.CGImage;

CGPoint fromPoint = CGPointMake(-layerImg.size.width, 0);
CGPoint toPoint = CGPointMake(layerImg.size.width, 0);

mask.position = fromPoint; // CoreAnimation animations do *not* persist

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.fromValue = [NSValue valueWithCGPoint:fromPoint];
animation.toValue = [NSValue valueWithCGPoint:toPoint];
animation.duration = 150;
animation.repeatCount = INFINITY;

[mask addAnimation:animation forKey:@"position"];
[self.emitterView.layer addSublayer:mask];

基本上我正在尝试云动画,云在屏幕上漂浮。我很确定我在这里对基本动画有一些概念错误。由于持续时间为 150(它应该很微妙),因此需要很长时间才能显示动画。似乎位置超出了我给出的范围。我为图层使用的图像是 728 x 368。

最佳答案

From the documentation:

The position property is located in the middle of the layer.

您使用的代码假设位置位于图层的左上角。您可以通过更改往返点来轻松解决此问题:

CGPoint fromPoint = CGPointMake(-layerImg.size.width*0.5, layerImg.size.height*0.5);
CGPoint toPoint = CGPointMake(layerImg.size.width*1.5, layerImg.size.height*0.5);

现在,您的图层将从屏幕外左侧动画到屏幕外右侧。

关于ios - CABasicAnimation 以一定距离出现在屏幕外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35025153/

相关文章:

ios - 如何同时为 UIImageView 的图像和 UIImageView 本身设置动画?

ios - 如何获取 backgroundSession NSURLSessionUploadTask 响应

ios - 创建104634个节点的链表时测试崩溃

objective-c - 在 SpriteKit 中,我可以将一些 SKActions 排队并行运行,而另一些则按顺序运行吗?

c++ - 如何将等效的动态分配嵌套 vector 从 C++ 编写到 Obj-C?

swift - 线性 CABasicAnimation 在容器 View 中不是线性执行的

ios - iOS中逐步添加矩形动画

ios - 如何知道 UIPasteboard.general.URL 中的 url 是否有效?

ios - Xcode UI 测试 - 使用 addSubview 添加的 Uiviews 对 UI 测试完全不可见

ios - 在 MapView 上的点之间画一条线