为了账号安全,请及时绑定邮箱和手机立即绑定

如何在视网膜显示质量不变的情况下捕捉UIView到UI图像

如何在视网膜显示质量不变的情况下捕捉UIView到UI图像

慕侠2389804 2019-06-14 17:16:31
如何在视网膜显示质量不变的情况下捕捉UIView到UI图像我的代码适用于正常设备,但在视网膜设备上创建模糊图像。有人知道解决我的问题吗?+ (UIImage *) imageWithView:(UIView *)view{     UIGraphicsBeginImageContext(view.bounds.size);     [view.layer renderInContext:UIGraphicsGetCurrentContext()];     UIImage * img = UIGraphicsGetImageFromCurrentImageContext();     UIGraphicsEndImageContext();     return img;}
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞


不使用UIGraphicsBeginImageContextUIGraphicsBeginImageContextWithOptions(如文件所示)在这页上)。为Scale传递0.0(第三个参数),您将得到一个与屏幕的缩放因子相等的上下文。

UIGraphicsBeginImageContext使用的固定比例因子为1.0,因此在iPhone 4上的图像实际上与其他iPhone上的图像完全相同。我敢打赌,无论是iPhone 4在你隐式放大的时候应用了一个过滤器,还是你的大脑对它的感觉比它周围的一切都不那么清晰。

所以,我猜:

#import <QuartzCore/QuartzCore.h>+ (UIImage *)imageWithView:(UIView *)view{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;}

在SWIFT 4中:

func image(with view: UIView) -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
    defer { UIGraphicsEndImageContext() }
    if let context = UIGraphicsGetCurrentContext() {
        view.layer.render(in: context)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        return image    }
    return nil}


查看完整回答
反对 回复 2019-06-14
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我创建了一个基于@Dima解决方案的SWIFT扩展:

extension UIImage {
    class func imageWithView(view: UIView) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0)
        view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
        let img = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return img    }}

编辑:SWIFT 4改进版

extension UIImage {
    class func imageWithView(_ view: UIView) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0)
        defer { UIGraphicsEndImageContext() }
        view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
        return UIGraphicsGetImageFromCurrentImageContext() ?? UIImage()
    }}

用法:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))  let image = UIImage.imageWithView(view)


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 708 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信