使用Core Animation对对象图像的复杂动画

时间:2014-01-15 10:24:00

标签: ios core-animation calayer touch-event

我的图像有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。 我只需要:

  1. 让它们从右向左连续移动,没有任何间隙。

  2. 将它们从正确位置的80x53平滑缩放到左侧位置的120x80

  3. 将不透明度从右侧位置的0.5变为左侧位置的1.0。

  4. 每次迭代持续0.5秒。

  5. 整个animation持续5秒或停在屏幕上。

  6. animation停止后,我需要将左侧对象移至屏幕左端。

  7. animation停止后,我需要知道屏幕左端停止的对象图像以便稍后使用其“对象数据”。

  8. 现在我可以做移动动画,但我的解决方案并不是那么好。

    // 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屏幕结束它并获取所需的图像数据。 我试图在一段时间内找到类似的解决方案,但一无所获。

    我正在寻找有关工作代码的帮助。 提前谢谢。

0 个答案:

没有答案