2012-08-07 91 views
0

经过对这里的一些研究,我发现了一个在iPhone应用程序中创建图像幻灯片放映的解决方案。所有工作正常,目前的图像显示一个接一个。如何在幻灯片中优雅地过渡图像?

我的问题是,我可以让图像交叉溶解/淡入淡出,而不是只出现,如果可以,我可以得到一些建议。

我的代码

.M

} 
int topIndex = 0, prevTopIndex = 1; 
- (void)viewDidLoad 
{ 


imagebottom = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,160,240)]; 
[self.view addSubview:imagebottom]; 

imagetop = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,160,240)]; 
[self.view addSubview:imagetop]; 

imageArray = [NSArray arrayWithObjects: 
       [UIImage imageNamed:@"image1.png"], 
       [UIImage imageNamed:@"image2.png"], 
       [UIImage imageNamed:@"image3.png"], 
       [UIImage imageNamed:@"ip2.png"], 
       nil]; 


NSTimer *timer = [NSTimer timerWithTimeInterval:5.0 
             target:self 
             selector:@selector(onTimer) 
             userInfo:nil 
             repeats:YES]; 

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; 
[timer fire]; 

[super viewDidLoad]; 
} 

-(void)onTimer{ 
if(topIndex %2 == 0){ 
    [UIView animateWithDuration:5.0 animations:^ 
    { 
     imagebottom.alpha = 0.0; 
    }]; 
    imagetop.image = [imageArray objectAtIndex:prevTopIndex]; 
    imagetop.image = [imageArray objectAtIndex:topIndex]; 
}else{ 
    [UIView animateWithDuration:5.0 animations:^ 
    { 
     imagetop.alpha = 1.0; 
    }]; 
    imagetop.image = [imageArray objectAtIndex:topIndex]; 
    imagebottom.image = [imageArray objectAtIndex:prevTopIndex]; 
} 
prevTopIndex = topIndex; 
if(topIndex == [imageArray count]-1){ 
    topIndex = 0; 
}else{ 
    topIndex++; 
} 

回答

2

你有一堆的选项。如果你有一个“容器”视图,你可以创建一个新的UIImageView透明(alpha = 0),然后使用一个UIView动画块淡入一个图像,另一个出来(或者把alpha = 1,例如,你有你的主视图,self.view,你有一个UIImageView * oldView,现在是rect(0,0,320,100),并且你想把它向右滑动滑动的NewView的ImageView的首先你设置NewView的框架(-320,0,320,100)然后按[self.view addSubview NewView的]为了动画的变化:。

[UIView animateWithDuration:2 animations:^ 
    { 
    oldView.frame = CGRectMake(320, 0, 320, 100); 
    newView.frame = CGRectMake(0,0,320, 100); 
    } 
completion:^(BOOL finished) 
    { 
    [oldView removeFromSuperView]; 
    } ]; 

您还可以使用的UIView的

选项
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion 

它给你更多/不同的选项(和它的工作太少!)。例如,使用在第一个例子相同的基本对象,但具有相同的帧oldView的NewView的:

transitionFromView:oldView toView:newView duration:2 options: UIViewAnimationOptionTransitionCrossDissolve completion:^(BOOL finished)) { /*whatever*/}]; 
+0

感谢您的回复,即时通讯无法理解如何应用到我的代码,你能就此展开毕竟,第二个版本听起来不错 – JSA986 2012-08-08 09:46:23