移动iPhone应用程序背景图像

时间:2010-04-18 19:38:09

标签: iphone cocoa-touch animation

我正在创建我的第一个iPhone原生应用程序(初学者Objective-C)。在我的主菜单标题屏幕上,我希望背景图像缓慢向左移动。是否可以平铺背景图像并使其移动?我基本上试图让我的云在背景中漂移。你会如何做到这一点?

3 个答案:

答案 0 :(得分:2)

我会在屏幕上添加一个UIImageView(放在屏幕上的其他内容下)。将云图像放在UIImageView中,并为帧值设置动画,使其在屏幕上移动。

像这样的东西(此代码未经验证)会为图像视图设置动画,向左移动屏幕:

cloudsImage.frame = CGRectMake(0,0,320,100);   // depends on your image

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3.0f];  // duration affects how fast it moves 

cloudsImage.frame = CGRectMake(-320,0,320,100);  // moves left off the screen

[UIView commitAnimations];

你也可以为同一个图像添加动画,然后在第一个图像从左侧向外滑动,使其显示为来自右侧的连续云层。

cloudsImage1.frame = CGRectMake(0,0,320,100);   // depends on your image
cloudsImage2.frame = CGRectMake(320,0,320,100); // start off the right edge

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3.0f];  // duration affects how fast it moves 

cloudsImage1.frame = CGRectMake(-320,0,320,100);  // moves left off the screen
cloudsImage2.frame = CGRectMake(0,0,320,100);     // moves left onto the screen

[UIView commitAnimations];

答案 1 :(得分:0)

我认为你可以用UIScrollView做一些聪明的事情。一旦视图加载,您可以在背景循环中为视图内容偏移设置动画。查看ScrollViewSuite示例代码,了解有关滚动视图和平铺的一些好提示。希望有所帮助。

答案 2 :(得分:0)

我使用基于块的动画做了类似的事情来实现这种效果。每个动画块都在一个单独的函数中定义。

假设两张图片的大小与屏幕相同。

一个图像完全在屏幕上开始,一个图像从屏幕左侧开始,右侧与屏幕的左边缘齐平(即,它完全在屏幕左侧)。 我们将屏幕上的图像称为“A”,将屏幕外图像称为“B”。

功能1() 第一个块将图像屏幕宽度向右移动 完成后,它将刚刚移出屏幕('A')的图像设置回屏幕左侧,然后调用function2()。

函数2() 第二个块将图像屏幕宽度向右移动 完成后,它将刚刚移出屏幕('B')的图像设置回屏幕左侧,然后调用function1()。

这是第一个功能:

-(void)animate_1
{
[UIView animateWithDuration:roadTimerPeriod delay:0.0 
   options:UIViewAnimationOptionCurveLinear|UIViewAnimationOptionAllowUserInteraction 
   animations: ^{
   // frame 1 moves off bottom
 imageAnimatedRoad1.transform = CGAffineTransformTranslate(imageAnimatedRoad1.transform,0,480);
 // frame 2 moves onto top
 imageAnimatedRoad2.transform = CGAffineTransformTranslate(imageAnimatedRoad1.transform,0,480);     
            } 
 completion:^(BOOL finished)
           {
           // reset frame 1 ready to move on
           imageAnimatedRoad1.frame = CGRectMake(0,-480,320,480);
           [self animate_2];
           } ];   
}

你认为这是一个很好的解决方案,还是我错过了一些明显的东西?