iPad上的核心动画截图

9

我正在使用核心动画构建一个场景,类似于旧版Apple TV的屏幕保护程序。一连串的图像(每个都是CALayer)从底部向上垂直通过。为了实现这个效果,在一个图层的动画结束后,当它移出视图时,它会重新定位到底部,分配一个新的图像,并重新进行动画处理。这发生在animationDidStop委托方法中。然而,我注意到,在iPad上运行应用程序时,如果我截取屏幕截图,那么这些图层就永远不会重新定位到底部,也不会再次出现。我已经确定问题的原因是截屏导致的。这让我想到截屏对动画时间有影响。所以...

  1. 在iDevice上截屏会对动画产生什么影响?
  2. 有没有更好的方法来实现这个效果?

你用什么方法来截屏?是使用Sleep + Home按钮,还是使用Xcode Organizer,或者是使用UIScreenGetImage()函数? - Ole Begemann
我正在使用设备上的Sleep + Home按钮。我尝试了从Xcode进行屏幕截图,没有问题。考虑到这一点,我开始认为问题与在设备上拍摄屏幕截图时出现的白色“闪光”动画有关。 - David
1
在你的-animationDidStop:方法中,你是否根据动画是否完成执行相同的操作? 也许当截图被拍摄时,动画被标记为未完成。 - Kemenaran
2个回答

1
您可以尝试根据视图内容以编程方式捕获屏幕截图,然后将其保存为截图。我不知道您的对象是什么,但这是我以前做过的事情。我的所有截图内容都在中。
CGRect screenRect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(CaptureView.frame.size);

CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor clearColor] set];
CGContextFillRect(ctx, screenRect);

[CaptureView.layer renderInContext:ctx];

UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil);
UIGraphicsEndImageContext();

你的动画是在一个静止的 UIImageView 中吗?如果你想要检测图片视图是否离开屏幕,只需要使用它的 frame.origin.y 和 0 进行比较即可。

0
你可以在动画过程中使用presentationLayer来捕获屏幕截图。 例如:[CaptureView.layer presentationLayer] 你还可以在CALayer的presentationLayer中检测触摸。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接