同様の投稿で、スクロールする画像を無限にアニメーション化する解決策を見つけました。
シームレスなループで画像の無限スクロールをアニメーション化する
このソリューションはうまく機能しますが、Retina デバイスで実行すると問題が発生するようです。特に、私はこのプロジェクトを iPad のみで実行しています。Retina 以外の iPad 2 では、問題なく画像をスクロールできます。しかし、Retina iPad 3 または 4 で実行すると、画像が乱雑になります。説明するのは難しいですが、私が言える最善のことは、それが文字化けしているということです。ピクセルはあらゆる方向に引き伸ばされます。ジャクソン・ポラックの絵に似ています。
スクリーンショット:
非網膜画像 (non 2x) と網膜バージョン (@2x) を使用してこれをテストしました。画像は大きく、全画面表示 (横長) で、幅は 4 パネル (4096 x 768) です。小さい画像で遊んでみましたが、結果は同じでした。
Retina デバイスに影響する CABasicAnimation のスクロール機能に制限はありますか? これが私が使用しているコードです(rob mayoffによって提供されたものとして):
UIImage *crawlImage = [UIImage imageNamed:@"CrawlBackground.png"];
UIColor *crawlPattern = [UIColor colorWithPatternImage:crawlImage];
self.crawlLayer = [CALayer layer];
self.crawlLayer.backgroundColor = crawlPattern.CGColor;
self.crawlLayer.transform = CATransform3DMakeScale(1, -1, 1);
self.crawlLayer.anchorPoint = CGPointMake(0, 1);
self.crawlLayer.frame = CGRectMake(0, 0, crawlImage.size.width + 1024, crawlImage.size.height);
[self.backgroundCrawl.layer addSublayer:self.crawlLayer];
self.backgroundCrawl.layer.zPosition = 0;
CGPoint startPoint = CGPointZero;
CGPoint endPoint = CGPointMake(-crawlImage.size.width, 0);
self.crawlLayerAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
self.crawlLayerAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
self.crawlLayerAnimation.fromValue = [NSValue valueWithCGPoint:startPoint];
self.crawlLayerAnimation.toValue = [NSValue valueWithCGPoint:endPoint];
self.crawlLayerAnimation.repeatCount = HUGE_VALF;
self.crawlLayerAnimation.duration = 30; // nn seconds to complete the cycle