簡體   English   中英

如何在幻燈片放映中優雅地過渡圖像?

[英]How to elegantly transition images in slide show?

經過一些研究,我找到了一個在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++;
}

你有很多選擇。 如果你有一個“容器”視圖,你可以使一個新的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

它為您提供了更多/不同的選擇(而且它的工作也少了!)。 例如,在第一個示例中使用相同的基本對象,但newView與oldView具有相同的框架:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM