UIScrollViewでスワイプによる上下スクロールを禁止する or 左右スクロールを禁止する
UIScrollViewでスワイプによる上下スクロールを禁止する or 左右スクロールを禁止する
UIScrollViewを絶対に斜めにスクロールさせない方法 | iPhoneアプリ開発まっしぐら★
上記サイト様で斜めスクロールの禁止方法はできるのですが、縦横の禁止はできません。
なにがしたいのかというと、iPhone4の解像度は960x640なわけですが、
960x1280の画像を用意してきた場合、縦方向のスクロールをしたところで特になにがあるわけでもないので
できればスクロールさせたくないわけです。
上記サイト様のコードをほんの少しいじるだけですが、忘備録として記録しておこうと思います。
.h側
.m側
ですので、「.y」の部分を「.x」に変更することで左右スクロールをさせないことも可能です。
また、本家様の[if~else if]部分を書き換えることで、横方向にスワイプされた時はスクロール・縦方向にスクロールされた時は表示の更新、といった機能を実装することが可能となります。
(↑試してないので、うまく行かない場合は申し訳ありませんm(_ _)m)
また一歩前進。
UIScrollViewを絶対に斜めにスクロールさせない方法 | iPhoneアプリ開発まっしぐら★
上記サイト様で斜めスクロールの禁止方法はできるのですが、縦横の禁止はできません。
なにがしたいのかというと、iPhone4の解像度は960x640なわけですが、
960x1280の画像を用意してきた場合、縦方向のスクロールをしたところで特になにがあるわけでもないので
できればスクロールさせたくないわけです。
上記サイト様のコードをほんの少しいじるだけですが、忘備録として記録しておこうと思います。
.h側
typedef enum
{
kILScrollViewDirectionNone = 0,
kILScrollViewDirectionHorizontal = 1,
kILScrollViewDirectionVertical = 2,
} ILScrollViewDirection;
@property (nonatomic, assign) ILScrollViewDirection direction;
@property (nonatomic, assign) CGPoint beganPoint;
{
kILScrollViewDirectionNone = 0,
kILScrollViewDirectionHorizontal = 1,
kILScrollViewDirectionVertical = 2,
} ILScrollViewDirection;
@property (nonatomic, assign) ILScrollViewDirection direction;
@property (nonatomic, assign) CGPoint beganPoint;
.m側
@synthesize direction = direction_;
@synthesize beganPoint = beganPoint_;
// スクロール管理の初期化
- (void)scrollViewWillBeginDragging:(UIScrollView*)scrollView {
self.direction = kILScrollViewDirectionNone;
// スクロールしはじめのoffset管理
self.beganPoint = [scrollView contentOffset];
}
// スクロール位置の矯正
- (void)scrollViewDidScroll:(UIScrollView*)scrollView {
CGPoint currentPoint = [scrollView contentOffset];
if ( kILScrollViewDirectionNone == self.direction ) {
// スクロール方向の決定
if ( !CGPointEqualToPoint( currentPoint, self.beganPoint ) ) {
CGFloat moveHorizontal = ABS( currentPoint.x - self.beganPoint.x );
CGFloat moveVertical = ABS( currentPoint.y - self.beganPoint.y );
if ( moveHorizontal < moveVertical ) {
NSLog( @"direction = Vertical" );
self.direction = kILScrollViewDirectionVertical;
} else {
NSLog( @"direction = Horizontal" );
self.direction = kILScrollViewDirectionHorizontal;
}
}
}
currentPoint.y = self.beganPoint.y;
[scrollView setContentOffset:currentPoint];
}
ぶっちゃけ最後の if~else if の部分を外して、強制的に縦固定させただけです。@synthesize beganPoint = beganPoint_;
// スクロール管理の初期化
- (void)scrollViewWillBeginDragging:(UIScrollView*)scrollView {
self.direction = kILScrollViewDirectionNone;
// スクロールしはじめのoffset管理
self.beganPoint = [scrollView contentOffset];
}
// スクロール位置の矯正
- (void)scrollViewDidScroll:(UIScrollView*)scrollView {
CGPoint currentPoint = [scrollView contentOffset];
if ( kILScrollViewDirectionNone == self.direction ) {
// スクロール方向の決定
if ( !CGPointEqualToPoint( currentPoint, self.beganPoint ) ) {
CGFloat moveHorizontal = ABS( currentPoint.x - self.beganPoint.x );
CGFloat moveVertical = ABS( currentPoint.y - self.beganPoint.y );
if ( moveHorizontal < moveVertical ) {
NSLog( @"direction = Vertical" );
self.direction = kILScrollViewDirectionVertical;
} else {
NSLog( @"direction = Horizontal" );
self.direction = kILScrollViewDirectionHorizontal;
}
}
}
currentPoint.y = self.beganPoint.y;
[scrollView setContentOffset:currentPoint];
}
ですので、「.y」の部分を「.x」に変更することで左右スクロールをさせないことも可能です。
また、本家様の[if~else if]部分を書き換えることで、横方向にスワイプされた時はスクロール・縦方向にスクロールされた時は表示の更新、といった機能を実装することが可能となります。
(↑試してないので、うまく行かない場合は申し訳ありませんm(_ _)m)
また一歩前進。