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