Car*_* C. 11 iphone core-animation rotation
当用户旋转设备时,我正准备从一个UIView转换到另一个UIView.这本身并不困难.但是,由于我在旋转后显示完全不同的内容,因此UIKit提供的默认动画(旋转当前显示的视图)在概念上是不合适的.
简单地禁用动画并突然交换视图是可以忍受的,但远远低于我正在构建到应用程序其余部分的润色.我更喜欢这样做:
什么时候应该调用AutorotateToInterfaceOrientation:我想在旋转之前抓取一个不透明的视图快照,如果你愿意的话,截取用户视图.然后在完成旋转并且系统已应用视图变换等之后,我可以显示我保存的快照视图,并将我选择的过渡动画设置为我的新视图.完成后,我可以发布我的快照并继续前进.
有没有办法做到这一点并不昂贵?
我能想到的唯一另一个选择是在除默认方向之外的所有方向上返回NO,然后通过应用我自己的动画和变换做出反应.我宁愿使用系统来做这件事,因为我觉得自己可能会在手动旋转的视图中导致"未定义"的键盘行为等.
思考?
小智 21
- (UIImage *)captureView:(UIView *)view {
CGRect screenRect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(screenRect.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, screenRect);
[view.layer renderInContext:ctx];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Run Code Online (Sandbox Code Playgroud)
在这里找到:
http://discussions.apple.com/thread.jspa?messageID=8358740
Moh*_* Km 12
这段代码对我有用
- (UIImage *)captureScreenInRect:(CGRect)captureFrame {
CALayer *layer;
layer = self.view.layer;
UIGraphicsBeginImageContext(self.view.bounds.size);
CGContextClipToRect (UIGraphicsGetCurrentContext(),captureFrame);
[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return screenImage;
}
Run Code Online (Sandbox Code Playgroud)
我可以保证你 [window drawRect:] 不会工作。大多数视图不实现drawRect:并且它肯定不像Mac上那样是递归的。
drawInContext: 也几乎是类似的,因为它从根本上要求图层绘制自身,而不是递归地绘制其子图层。“默认实现什么也不做。” 说明了一切。
我通过执行以下操作为应用程序商店中的 Clif Bar Save Our Snow 应用程序实现此功能:
是的,一个相当大的痛苦。但是,是的,它运行得很好,并且被苹果公司通过了:)。