2013-03-01 26 views
0

在一个类似的帖子,我发现了一个解决方案,无限动画滚动图像:CABasicAnimation - 视网膜设备上的图像的无限滚动是乱码

Animate infinite scrolling of an image in a seamless loop

虽然这种解决方案精美的作品,似乎有在视网膜装置上运行时的问题。特别是,我只在iPad上运行此项目。非视网膜iPad 2滚动图像没有任何问题。但运行在视网膜iPad 3或4的图像是一团糟!这很难描述,但我能说的最好的是它是乱码。像素被延伸到每一个方向。它类似于杰克逊波拉克的绘画。

屏幕截图:

http://imgur.com/Q7n08kv

我测试此使用非视网膜图像(非2x)和视网膜的版本(@ 2×)。图像很大 - 全屏(横向),宽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 
+0

也许你可以上传一个截图到imgur.com并发布一个链接。 – 2013-03-01 05:36:22

+0

我编辑了这个问题,并添加了一个链接到问题看起来像的屏幕截图。 – 2013-03-02 01:07:01

回答

0

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

或:

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

这应该修复它。允许大图像正确滚动。

0
self.crawlLayer = [CALayer layer]; 

只要你做,你应该设置图层的contentsScale

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

否则可能无法正常上双分辨率的屏幕显示。

相关问题