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