簡易スライドビューア [14] スライドショー雛形

2010年10月3日日曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

前回検証したトランジションを利用してスライドショー再生の実装に入る。

Cocoaの日々: トランジション[3] CATransition を使う(その2)


仕組み


トランジションは kCATransitionFade(ディゾルブ)を使う。CATransitionは2つのビューの切り替えが必要なので、トランジション用のビューを1つ用意し、これを現在表示中の UIScrollView と切り替える。


実装


トランジションはタイマーによって起動する。
- (void)startSlideShow
{
 if (self.isRunningSlideShow) {
  return;
 }
 
 self.timer = [NSTimer scheduledTimerWithTimeInterval:self.slideShowDuration
              target:self
            selector:@selector(nextSlideShow:)
            userInfo:nil
             repeats:YES];
 self.isRunningSlideShow = YES;
}

メインのコードはこんなかんじ。トランジション自体は検証時のコードそのまんま。
- (void)nextSlideShow:(NSTimer*)timer
{
 
 NSInteger numberOfViews = [self.delegate numberImagesInGallery:self];

 if (numberOfViews <= (self.currentImageIndex+1)) {
  [self stopSlideShow];
  return;
  // abort
 }
 XCGalleryInnerScrollView* currentInnerScrollView =
  [self.innerScrollViews objectAtIndex:kIndexOfCurrentScrollView];
 
 self.currentImageIndex = self.currentImageIndex + 1;
 [self setImageAtIndex:self.currentImageIndex
    toScrollView:self.transitionInnerScrollView];
 self.transitionInnerScrollView.frame = currentInnerScrollView.frame;
 // ??? currentOffset ?
 
 CATransition* transition = [CATransition animation];
 transition.duration = DEFAULT_TRANSITION_DURATION;
 transition.timingFunction = [CAMediaTimingFunction
     functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
 transition.type = kCATransitionFade;
 transition.delegate = self;
 
 [self.scrollView.layer addAnimation:transition forKey:nil];

 currentInnerScrollView.hidden = YES;
 self.transitionInnerScrollView.hidden = NO;
 
 [self.innerScrollViews replaceObjectAtIndex:kIndexOfCurrentScrollView
          withObject:self.transitionInnerScrollView];
 self.transitionInnerScrollView = currentInnerScrollView;

}


実行結果


実行してみよう。
開始ボタンを押して数秒待つと画像が切り替わる。


いい感じだ。


ソースコード


GitHubからどうぞ。
EasyGallery at 2010-10-03 from xcatsan's iOS-Sample-Code - GitHub

- - - - -
再生はできたが、停止ができない、途中フリックすると画像が消えるなど課題が残っている。一つずつ潰していこう。

Responses

Leave a Response

人気の投稿(過去 30日間)