私は数年前に似たようなことをしました。最初はCGImageMaskCreateを使ってみましたが、透明な「切り抜き」のある画像を作成し、アニメーション効果を使ってその下の画像をスクロールするだけの方がはるかに簡単であることがわかりました。
あなたの場合、画面サイズのリネンの画像を見つけます。次に、画像エディタ(GIMPを使用)を使用して、フラットカラーを使用してリネンにいくつかのボックスを描画します。次に、そのボックスの色を透明にマッピングして、切り抜きを作成します。これを行う方法は他にもありますが、それが私が行う方法です。
アプリで、メインビューに2つ以上の画像ビューを追加します。配置は実行時に決定されるため、配置について心配する必要はありません。これらの画像ビューを設定して、「スクロール」したい画像を含めることができます。次に、カットアウト付きのリネンUIImageViewを追加して、上部に配置し、画面サイズ全体を占めるようにします。上部のUIImageViewの背景が透明に設定されていることを確認してください。
アプリが起動したら、「下」の画像ビューを上から下にレイアウトし、[UIView beginAnimation]を開始して、「y」の位置を変更して下の画像ビューを上にスクロールします。このアニメーションには、上部の画像ビューが完全に画面から外れたときに呼び出されるコールバックが必要です。次に、完了したコールバックで、現在の状態をレイアウトし、アニメーションを再開します。これが私が使用したコードの本質です(ただし、スクロールは右から左であり、下から上ではなく、画像はすべて同じサイズでした)。
- (void)doAnimationSet
{
[iv1 setFrame:CGRectMake(0, 0, imageWidth, imageHeight)];
[iv2 setFrame:CGRectMake(imageWidth, 0, imageWidth, imageHeight)];
[iv3 setFrame:CGRectMake(imageWidth*2, 0, imageWidth, imageHeight)];
[self loadNextImageSet];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:10];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[iv1 setFrame:CGRectMake(-imageWidth, 0, imageWidth, imageHeight)];
[iv2 setFrame:CGRectMake(0, 0, imageWidth, imageHeight)];
[iv3 setFrame:CGRectMake(imageWidth, 0, imageWidth, imageHeight)];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(doneAnimation:finished:context:)];
[UIView commitAnimations];
}
- (void)doneAnimation:(NSString *)aid finished:(BOOL)fin context:(void *)context
{
[self doAnimationSet];
}
これはあなたが探している効果を与えるはずです。幸運を :)