UIView 的快照未正确缩放?
Snapshot of UIView not scaling correctly?
我有一个 UIView canvas
,我想保存它的屏幕截图 和它的子视图(它们是彩色形状)在相机胶卷上,当我按UIBarButton shareBarButton
。这适用于模拟器,但是,它不会以我喜欢的方式生成图像:
- Ideally what I would like the snapshot to look like(w/out 屏幕顶部的运营商、时间和电池状态除外)。
- What the snapshot in the camera roll actually looks like.
我希望快照看起来与 iPhone 屏幕上的完全一样。因此,如果形状的一部分超出了屏幕,则快照将仅捕获屏幕上可见的形状部分。我还希望快照具有 canvas
的大小,这基本上是视图的大小,除了稍短的高度:
canvas = UIView(frame: CGRectMake(0, 0, view.bounds.height, view.bounds.height-toolbar.bounds.height))
如果有人能指出我在创建快照时做错了什么,将不胜感激!
我的代码:
func share(sender: UIBarButtonItem) {
let masterpiece = canvas.snapshotViewAfterScreenUpdates(true)
let image = snapshot(masterpiece)
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
func snapshot(masterpiece: UIView) -> UIImage{
UIGraphicsBeginImageContextWithOptions(masterpiece.bounds.size, false, UIScreen.mainScreen().scale)
masterpiece.drawViewHierarchyInRect(masterpiece.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
首先我会尝试 snap-shotting UIWindow 看看是否能解决您的问题:
这是我使用的 UIWindow 扩展(不是专门用于相机工作)- 试试看。
import UIKit
extension UIWindow {
func capture() -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.frame.size, self.opaque, UIScreen.mainScreen().scale)
self.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
我这样称呼它:
let window: UIWindow! = UIApplication.sharedApplication().keyWindow
let windowImage = window.capture()
我有一个 UIView canvas
,我想保存它的屏幕截图 和它的子视图(它们是彩色形状)在相机胶卷上,当我按UIBarButton shareBarButton
。这适用于模拟器,但是,它不会以我喜欢的方式生成图像:
- Ideally what I would like the snapshot to look like(w/out 屏幕顶部的运营商、时间和电池状态除外)。
- What the snapshot in the camera roll actually looks like.
我希望快照看起来与 iPhone 屏幕上的完全一样。因此,如果形状的一部分超出了屏幕,则快照将仅捕获屏幕上可见的形状部分。我还希望快照具有 canvas
的大小,这基本上是视图的大小,除了稍短的高度:
canvas = UIView(frame: CGRectMake(0, 0, view.bounds.height, view.bounds.height-toolbar.bounds.height))
如果有人能指出我在创建快照时做错了什么,将不胜感激!
我的代码:
func share(sender: UIBarButtonItem) {
let masterpiece = canvas.snapshotViewAfterScreenUpdates(true)
let image = snapshot(masterpiece)
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
func snapshot(masterpiece: UIView) -> UIImage{
UIGraphicsBeginImageContextWithOptions(masterpiece.bounds.size, false, UIScreen.mainScreen().scale)
masterpiece.drawViewHierarchyInRect(masterpiece.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
首先我会尝试 snap-shotting UIWindow 看看是否能解决您的问题:
这是我使用的 UIWindow 扩展(不是专门用于相机工作)- 试试看。
import UIKit
extension UIWindow {
func capture() -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.frame.size, self.opaque, UIScreen.mainScreen().scale)
self.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
我这样称呼它:
let window: UIWindow! = UIApplication.sharedApplication().keyWindow
let windowImage = window.capture()