なかじまの開発ブログ

アプリ開発における備忘録などなど。

MENU

UIScrollViewの移動量を取得【Objective-C】

Interface BuilderにUIScrollViewを設置。

f:id:s_nakajima:20151111122230p:plain

設置したUIScrollViewをViewController.hにOutlet接続(名前:scrollView)。


『ViewController.h』

@interface ViewController : UIViewController {
  float offsetX, offsetY; // UIScrollViewの初期オフセット
    float moveX, moveY;   // スクロールの移動量
}

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;


『ViewController.m』

  ・
  ・
  ・
@synthesize scrollView;

- (void)viewDidLoad {
  [super viewDidLoad];

  moveX = moveY = 0;

  scrollView.contentSize = CGSizeMake(500, 500); // スクロール範囲を指定
  scrollView.layer.borderWidth = 2.0f; // UIScrollViewの枠線を設定
  scrollView.layer.borderColor = [UIColor blackColor].CGColor; // 枠線の色を指定
  offsetX = scrollView.contentOffset.x; // 初期オフセットを代入
  offsetY = scrollView.contentOffset.y;

  // スクロールさせるViewを作成
  UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 500, 500)];
  view.backgroundColor = [UIColor whiteColor];
  [scrollView addSubview:view]; // scrollViewにaddSubview

  // タイマーを設定
  NSTimer *timer = [NSTimer timerWithTimeInterval:0.01 target:self selector:@selector(onTick:) userInfo:nil repeats:YES];
  [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}

- (void)onTick:(NSTimer *)timer {
  // 移動量を計算(初期オフセットから現在のオフセットを引く)
  moveX = offsetX - scrollView.contentOffset.x;
  moveY = offsetY - scrollView.contentOffset.y;
  // 移動量を表示
  NSLog(@"X:%f Y:%f", moveX, moveY);
}