脚本动画阻止iOS

时间:2012-05-08 01:45:07

标签: ios animation objective-c-blocks

我正在尝试动画一系列全屏图像。每个图像将以不同的方式进行动画处理。我想将这些动画存储在数据库或plist或其他任何地方,我只是不想让它们硬编码。动画将非常简单,图像中的物体会摇晃或弹跳或者你拥有什么。我将使用块为对象设置动画,理想情况下我希望将各个块存储在数据存储中。我想避免使用单独的脚本语言或类似的东西。

我最好的行动方案是什么?

2 个答案:

答案 0 :(得分:2)

如果您想将它们存储在例如plist中,您可以执行以下操作:

<plist>
<array>
    <dict>
        <key>filename</key>
        <string>first.jpg</string>
        <key>animation</key>
        <string>bounce</string>
        <key>duration</key>
        <real>0.5</real>
    </dict>
    <dict>
        <key>filename</key>
        <string>second.jpg</string>
        <key>animation</key>
        <string>easeinout</string>
        <key>duration</key>
        <real>1.0</real>
    </dict>
    <!-- et cetera -->
</array>
</plist>

然后,您可以通过编写类似以下代码段的内容将其解码为实际动画:

- (void)loadAnimations
{
    NSArray *animations = [NSArray arrayWithContentsOfFile:@"/Users/H2CO3/animations.plist"];
    for (NSDictionary *animation in animations)
    {
        UIImage *img = [UIImage imageNamed:[animation objectForKey:@"filename"]];
        NSString *animationType = [animation objectForKey:@"animation"];
        float duration = [(NSNumber *)[animation objectForKey:@"duration"] floatValue];

        if ([animationType isEqualToString:@"bounce"])
        {
            /* animation block 1 */
        }
        else if ([animationType isEqualToString:@"easeinout"])
        {
            /* animation block 2 */
        }
        /* Et cetera... */
    }
}

答案 1 :(得分:0)

我不清楚如果可能的话,将动画存储在数据存储中可能会带来什么好处。如果您只是不想重复动画代码,可以将其放在方法中并将视图传递给方法。

-(void)jiggle:(UIView *)image {
    [UIView animateWithDuration:.1
                          delay:0
                        options:UIViewAnimationOptionLayoutSubviews
                     animations:^{
                         image.transform = CGAffineTransformMakeRotation(-5 * M_PI / 180);
                     }
                     completion:^(BOOL finished){
                         [UIView animateWithDuration:.1
                                               delay:0
                                             options:UIViewAnimationOptionLayoutSubviews
                                          animations:^{
                                              image.transform = CGAffineTransformMakeRotation(5 * M_PI / 180);
                                          }
                                          completion:^(BOOL finished){
                                              [UIView animateWithDuration:.1
                                                                    delay:0
                                                                  options:UIViewAnimationOptionLayoutSubviews
                                                               animations:^{
                                                                   image.transform = CGAffineTransformMakeRotation(0 * M_PI / 180);
                                                               }
                                                               completion:nil
                                               ];
                                          }
                          ];
                     }
     ];
}