[英]Scripting Animation blocks iOS
我正在嘗試動畫一系列全屏圖像。 每個圖像將以不同的方式進行動畫處理。 我想將這些動畫存儲在數據庫或plist或其他任何地方,我只是不想讓它們硬編碼。 動畫將非常簡單,圖像中的物體會搖晃或彈跳或者你擁有什么。 我將使用塊為對象設置動畫,理想情況下我希望將各個塊存儲在數據存儲中。 我想避免使用單獨的腳本語言或類似的東西。
什么是我最好的行動方案?
如果你想將它們存儲在例如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... */
}
}
我不清楚如果可能的話,將動畫存儲在數據存儲中可能會帶來什么好處。 如果您只是不想重復動畫代碼,可以將其放在方法中並將視圖傳遞給方法。
-(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
];
}
];
}
];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.