我的图像有5个物体。我将它们添加到数组并随机播放它们。
// Adding Things to Things Strip
[thingStrip removeAllObjects];
for (Thing *i in myThings) {
[self addThing:[i icon]];
}
// Randomizing Things' order in the Things Strip
for (int x = 0; x<thingStrip.count; x++) {
int randInt = (arc4random() % (thingStrip.count - x)) + x;
[thingStrip exchangeObjectAtIndex:x withObjectAtIndex:randInt];
}
// Adding Things' Images
for (int i=0; i<thingStrip.count; i++) {
UIImage *thingImage = thingStrip[i];
然后我将它们添加到UIImage
并使用它们创建CALayers
。
我只需要:
让它们从右向左连续移动,没有任何间隙。
将它们从正确位置的80x53平滑缩放到左侧位置的120x80
将不透明度从右侧位置的0.5变为左侧位置的1.0。
每次迭代持续0.5秒。
整个animation
持续5秒或停在屏幕上。
animation
停止后,我需要将左侧对象移至屏幕左端。
animation
停止后,我需要知道屏幕左端停止的对象图像以便稍后使用其“对象数据”。
现在我可以做移动动画,但我的解决方案并不是那么好。
// Adding Things' Images
for (int i=0; i<thingStrip.count; i++) {
UIImage *thingImage = thingStrip[i];
//for (int j = 0; j < 10; j++)
//{
CALayer *thingFrame = [CALayer layer];
thingFrame.bounds = CGRectMake(0.0, 0.0, 80.0, 53.0);
thingFrame.position = CGPointMake(i*thingFrame.frame.size.width, 515.0);
//thingFrame.position = CGPointMake(i*thingFrame.frame.size.width + j * thingStrip.count * thingFrame.frame.size.width, 515.0);
thingFrame.contents = (id)thingImage.CGImage;
[thingFrame setAnchorPoint:CGPointMake(0.0, 0.0)];
[self.view.layer addSublayer:thingFrame];
CGFloat currentPosition = [[thingFrame valueForKeyPath:@"position.x"] floatValue];
CGFloat newPosition = currentPosition - thingStrip.count * thingFrame.frame.size.width;
CABasicAnimation *thingMoveAnimation = [CABasicAnimation animationWithKeyPath:@"position.x"];
thingMoveAnimation.duration = 0.5f;
thingMoveAnimation.repeatDuration = 5.0f;
thingMoveAnimation.delegate = self;
thingMoveAnimation.fromValue = @(currentPosition);
thingMoveAnimation.toValue = @(newPosition);
thingMoveAnimation.fillMode = kCAFillModeForwards;
[thingFrame addAnimation:thingMoveAnimation forKey:@"position.x"];
//}
}
此代码仅在我使用for循环时使用'j'(注释一个),每个图像添加5个。只有这样我才能获得平滑移动的动画,没有任何空我想这不是正确的解决方案。当我只使用一个for循环时,我会一次又一次地向左移动5个图像的动画,但不是一个接一个地连续移动。
我没有缩放和不透明度动画的工作解决方案,我不知道如何通过touching
屏幕结束它并获取所需的图像数据。
我试图在一段时间内找到类似的解决方案,但一无所获。
我正在寻找有关工作代码的帮助。 提前谢谢。