読者です 読者をやめる 読者になる 読者になる

なかじまの開発ブログ

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

MENU

背景のスクロールをずらして奥行を作る【Objective-C】

Objective-C

タイトルが思いつきませんでした。

前回のつづきみたいなものです。

前回→UIScrollViewの移動量を取得【Objective-C】 - なかじまブログ



前回設置したUIScrollViewの下に、同じ大きさのUIScrollViewを設置。
f:id:s_nakajima:20151112121540p:plain

そしてViewController.hにOutlet接続をします(名前:backscrollView)

『ViewController.h』

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

    UIImageView *backImageView; // 背景
}

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


『ViewController.m』

  ・
  ・
  ・
@synthesize scrollView;
@synthesize backscrollView;

- (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;

  // 背景を描画
  backImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
  [backscrollView addSubview:backImageView];

  // ステージを描画
  UIImageView *stageImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 500, 500)];
  stageImageView.image = [UIImage imageNamed:@"stage.png"];
  [scrollView addSubview:stageImageView];

  // タイマーを設定
  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);
  // 背景を移動
  backImageView.frame = CGRectMake(moveX / 2, moveY / 2, 500, 500);
}


計算した移動量を割る数字はお好きに。


実行結果

youtu.be