ピンチやフリックでスライドショーが停止しない。前回の実装ではイベントハンドリングが不足しているのでこれを直す。
#もはやタイトルが何のことだがわからないが...
イベント処理
対処すべきは、タップ、ピンチ(拡大縮小)、フリック(ページめくり)の3つ。前回は最初のタップしかハンドリングしていなかったので、スライドショ−実行中にピンチ、フリックしても止まらない。
ビュー階層
タップとピンチは一番上の UIScrollView が処理する。フリックは2番目のベースの UIScrollViewが処理。まず前回のコードを書き直してタップとピンチに対処する。
@class XCGalleryInnerScrollView; @protocol XCGalleryInnerScrollViewDelegate - (void)didTouched:(XCGalleryInnerScrollView*)innerScrollView; @endtouchesBegan:withView: と UIScrollViewDelegate の scrollViewWillBeginZooming:withView: を実装する。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.eventDelegate didTouched:self]; } - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { [self.eventDelegate didTouched:self]; }
続いてフリックの対処。ベースの UISCrollViewのデリゲート先は XCGalleryViewになっているのでここでフリックを処理する。
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [self stopSlideShow]; }
これでスライドショーが停止するようになった。
ソースは GitHubからどうぞ。
EasyGallery at 2010-10-19 from xcatsan's iOS-Sample-Code - GitHub
(今回は以上)
Responses
Leave a Response