0

在类似的帖子中,我找到了一个无限动画滚动图像的解决方案:

在无缝循环中动画无限滚动图像

尽管此解决方案运行良好,但在视网膜设备上运行时似乎存在问题。特别是,我只在 iPad 上运行这个项目。非视网膜 iPad 2 滚动图像没有任何问题。但是在视网膜 iPad 3 或 4 上运行图像是一团糟!这很难描述,但我能说的最好的就是它是乱码。像素被拉伸到各个方向。它类似于杰克逊·波拉克的画作。

截屏:

http://imgur.com/Q7n08kv

我使用非视网膜图像(非 2x)和视网膜版本(@2x)对此进行了测试。图像很大 - 全屏(横向),宽 4 个面板 (4096 x 768)。我玩过较小的图像,但结果相同。

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
4

2 回答 2

0

self.crawlLayer.contents = (id)crawlImage.CGImage;

或者:

self.crawlLayer.contents = (__bridge id)([crawlImage CGImage]);

这应该解决它。允许大图像正确滚动。

于 2013-04-16T01:41:58.603 回答
0
self.crawlLayer = [CALayer layer];

一旦你制作了一个图层,你应该设置它contentsScale

self.crawlLayer.contentsScale = [[UIScreen mainScreen] scale];

否则它可能无法在双分辨率屏幕上正确显示。

于 2013-04-16T02:01:30.367 回答