Так что я пытаюсь CABasicAnimation в первый раз. Я пытаюсь применить его на слое, и я хочу, чтобы слой интерполировался из одной точки в другую. Я изначально установил отрицательную координату x, и я положил анимацию на бесконечность. Он работает, но на экране требуется несколько секунд. Поэтому он должен полностью пройти до конца и начать снова. Ниже приведен кодCABasicAnimation появляется на экране с некоторым отрывом
[[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 (она должна быть тонкой), на анимацию требуется бесконечно. Похоже, что положение за кадром больше, чем то, что я дал. Image Я использую для слоя 728 по 368.
Большое спасибо. :) Я не правильно прочитал документацию позиции. Это сработало. Большое спасибо. :) –