首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在不使用drawrect方法的情况下获取UIView的上下文

在不使用drawRect:方法的情况下获取UIView的上下文,可以使用以下方法:

  1. 使用UIGraphicsBeginImageContextWithOptions函数创建上下文:
代码语言:objective-c
复制
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
  1. UIView绘制到上下文中:
代码语言:objective-c
复制
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
  1. 从上下文中获取UIImage对象:
代码语言:objective-c
复制
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  1. 结束上下文:
代码语言:objective-c
复制
UIGraphicsEndImageContext();

完整的代码示例如下:

代码语言:objective-c
复制
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

这样就可以在不使用drawRect:方法的情况下获取UIView的上下文,并将其转换为UIImage对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

UI篇-VC生命周期以及UIViewlayoutSubviews和drawRect方法

: ** 使用 VC绘制UI时候,它不同于 UIViewUIView中 init方法调用后,UIView就已经绘制好(初始化好了)。...UIView方法执行顺序大概是这样: init 方法 >>属性set/get 方法>> layoutSubviews(当然是要达到触发条件)>>drawRect使用得当可以View调用中起到很好效果...drawRect以下情况下会被调用: 1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。...以上1,2推荐;而3,4不提倡 drawRect方法使用注意点: 1、 **若使用UIView绘图,只能在drawRect方法获取相应contextRef并绘图。...** 2、**若使用calayer绘图,只能在drawInContext: 中(类似鱼drawRect)绘制**,或者delegate中相应方法绘制。

1.9K30

Linux中破坏磁盘情况下使用dd命令

cbs,不足部分用空格填充 lcase:把大写字符转换为小写字符 ucase:把小写字符转换为大写字符 swab:交换输入每对字节 noerror:出错时不停止 notrunc:截短输出文件 sync...你已插入了空驱动器(理想情况下容量与/dev/sda系统一样大)。...本文中,if=对应你想要恢复镜像,of=对应你想要写入镜像目标驱动器: # dd if=sdadisk.img of=/dev/sdb 还可以一个命令中同时执行创建操作和复制操作。...他曾告诉我,他监管每个大使馆都配有政府发放一把锤子。为什么?万一大使馆遇到什么危险,可以使用这把锤子砸烂所有硬盘。 那为什么不删除数据呢?你不是开玩笑吧?...然而,你可以使用dd让不法分子极难搞到你旧数据。

7.6K42
  • IOS开发系列——UIView专题之三:自定义绘制篇【整理,部分原创】

    3UIView重绘机制 3.1DrawRect机制 3.1.1简介 iOS绘图操作是UIViewdrawRect方法中完成,所以如果我们要想在一个UIView中绘图,需要写一个扩展UIView...重绘操作仍然drawRect方法中完成,但是苹果建议直接调用drawRect方法,当然如果你强直直接调用此方法,当然是没有效果。...(调用setNeedsDisplay会自动调用drawRectUIView中,重写drawRect: (CGRect) aRect方法,可以自己定义想要画图案.且此方法一般情况下只会画一次.也就是说这个...以上1,2推荐;而3,4不提倡 1、若使用UIView绘图,只能在drawRect方法获取相应contextRef并绘图。...2、若使用calayer绘图,只能在drawInContext:中(类似鱼drawRect)绘制,或者delegate中相应方法绘制。

    1.1K30

    使用JPA原生SQL查询绑定实体情况下检索数据

    然而,某些情况下,你可能希望直接使用SQL执行复杂查询,以获得更好控制和性能。本文将引导你通过使用JPA中原生SQL查询来构建和执行查询,从而从数据库中检索数据。...方法创建了一个原生查询对象。...在这种情况下,结果列表将包含具有名为depot_id单个字段对象。...需要执行复杂查询且标准JPA映射结构不适用情况下,这项知识将非常有用。欢迎进一步尝试JPA原生查询,探索各种查询选项,并优化查询以获得更好性能。...这种理解将使你选择适用于Java应用程序中查询数据正确方法时能够做出明智决策。祝你编码愉快!

    67230

    谈谈对drawRect理解

    写在前面 UIView对于iOS开发来讲,再熟悉不过了。也正是因为这一点,我们可能会忽略UIView一些特有方法理解和使用。今天,笔者主要整理一下对drawRect方法理解和使用。...默认情况下,该方法视图加载过程中不做任何人处理。当子类使用Core Graphics和UIKit绘制视图内容时就需要在该方法中添加绘制代码。...drawRect简介 drawRect方法UIView使用上起着十分关键作用。...若子类继承自其他View类则需要调用super方法以实现重绘。 若使用UIView绘图,只能在drawRect:方法获取绘制视图contextRef。...在其他方法获取contextRef都是生效drawRect:方法不能手动调用,需要调用实例方法setNeedsDisplay或者setNeedsDisplayInRect,让系统自动调用该方法

    1.8K20

    图形

    使用UiKit,你只能在当前上下文中绘图,所以如果你当前处于UIGraphicsBeginImageContextWithOptions函数或drawRect方法中,你就可以直接使用UIKit提供方法进行绘图...如果你持有一个context:参数,那么使用UIKit提供方法之前,必须将该上下文参数转化为当前上下文。...1、UIView+drawRect+UIBezierPath 重写drawRect能够自动生成Context,所以可以drawRect方法里面画图形 - (void)drawRect:(CGRect...+drawRect+context 获取drawRect自动生成context,context里画图形 - (void)drawRect:(CGRect)rect{ CGContextRef...:,并传入刚才准备好上下文 viewdrawLayer:inContext:方法内部又会调用viewdrawRect:方法 view就可以drawRect:方法中实现绘图代码, 所有东西最终都绘制到

    1.1K10

    iOS学习——Quartz2D学习(1)

    相关联.才能将内容绘制到View上面.DrawRect方法方法里 步骤: 1.要先自定定UIView 2.实现DrawRect方法 3.DrawRect方法中取得跟View相关联上下文...DrawRect作用:专用在这个方法当中绘图.只有在这个方法当中才能取得跟View相关联上下文....当创建一个UIBezierPath对象之后,我们可以使用stroke和fill方法current graphics context中去渲染它,这两个方法底层实现,就是获取上下文,拼接路径,把路径添加到上下文...调用这些方法之前,我们要进行一些其他任务去确保正确绘制path,以及path设置。 使用UIColor类方法去stroke和fill想要颜色。...使用stroke和fill方法进行渲染时,不需要我们手动去获取上下文了,这两个方法会自定获取view上下文,然后该view上绘制渲染path对应路径,stroke是绘制线,fill是填充path对应封闭区域

    1.1K20

    dotnet 使用 FormatterServices GetUninitializedObject 方法丢失 DLL 情况下能否执行

    dotnet 里面,可以使用 FormatterServices GetUninitializedObject 方法可以实现只创建对象,而不调用对象构造函数方法。...而如果在使用方法时,存在了 DLL 缺失情况,此时能否让此方法运行通过,创建出空对象 答案是可以创建成功,也可以创建不成功。当所有碰到字段都是引用类型时候,可以创建成功。...接着运行 Main 方法,可以看到实际上 f1 对象还是被创建才出来,不会炸掉 上面代码放在 github 和 gitee 欢迎访问 可以通过如下方式获取本文源代码,先创建一个空文件夹,接着使用命令行...然而此时我可以做到更改 F2 所在程序集,只需要更新 F3 所在程序集即可,这就是因为在运行时里面读取了 F3 所在程序集拿到了 F3 占用内存空间大小,不需要依赖 F2 所在程序集定义...上面代码放在 github 和 gitee 欢迎访问 可以通过如下方式获取本文源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,命令行里面输入以下代码,即可获取到本文代码 git

    61240

    【IOS开发基础系列】UIView专题

    使用UIGraphicsGetCurrentContext方法获取当前图形内容用来绘制,坐标原点在左上角。不要保留图片内容当他可以被drawRect:这个方法调用。...重绘操作仍然drawRect方法中完成,但是苹果建议直接调用drawRect方法,当然如果你强直直接调用此方法,当然是没有效果。...(调用setNeedsDisplay会自动调用drawRect)         UIView中,重写drawRect: (CGRect)aRect方法,可以自己定义想要画图案.且此方法一般情况下只会画一次....也就是说这个drawRect方法一般情况下只会被掉用一次. ...1、若使用UIView绘图,只能在drawRect方法获取相应contextRef并绘图。如果在其他方法获取获取到一个invalidateref并且不能用于画图。

    62830

    iOS技术面试题及答案

    微信截图_20200911135347.png 一、如何绘制UIView? 绘制一个UIView最灵活方法就是由它自己完成绘制。...实际上你不是绘制一个UIView,而是子类化一个UIView并赋予绘制自己能力。当一个UIView需要执行绘制操作时,drawRect方法就会被调用,覆盖此方法让你获得绘图操作机会。...当drawRect方法被调用,当前图形上下文也被设置为属于视图图形上下文,你可以使用Core Graphic或者UIKit提供方法将图形画在该上下文中。...1.导入了CoreLocation.framework 2.ios8以后,如果需要使用定位功能,就需要请求用户授权,首次运行时会弹框提示 3.通过本机自带gps获取位置信息(即经纬度) 七、苹果内购实现流程...八、支付宝,微信等相关类型sdk集成 1.支付宝开发平台创建应用并获取APPID 2.配置密钥 3.集成并配置SDK 4.调用接口(如交易查询接口,交易退款接口) 九、 gcd产生死锁原因及解锁方法

    86201

    图层树和寄宿图 -- iOS Core Animation 系列一

    虽然可以实现类似UIImageView显示效果,但平常并不推荐使用这种方法。...2.1.4 maskToBounds 看上面最新运行图,发现图片超出了视图边界。因为默认情况下UIView仍会绘制超过边界内容,CALayer也例外。...-drawRect: 通过继承UIView来实现此方法进行自定义绘制。这个方法默认是没有被实现。因为对于UIView来说,寄宿图不是必须。...如果你不需要寄宿图,不要写这个方法,会造成资源浪费,详细部分见《内存恶鬼drawRect》 视图屏幕上出现时候-drawRect:会自动被调用。...因为UIView创建时,会自动吧图层代理设置为自己,然后提供了一个-displayLayer:方法实现。 ---- - 系列一完 -

    1.2K20

    2019年11月2日:总结iOS技术面试题及应对答案

    一、如何绘制UIView? 绘制一个UIView最灵活方法就是由它自己完成绘制。实际上你不是绘制一个UIView,而是子类化一个UIView并赋予绘制自己能力。...当一个UIView需要执行绘制操作时,drawRect方法就会被调用,覆盖此方法让你获得绘图操作机会。...当drawRect方法被调用,当前图形上下文也被设置为属于视图图形上下文,你可以使用Core Graphic或者UIKit提供方法将图形画在该上下文中。 二、什么是MVVM?主要目的是什么?...1.导入了CoreLocation.framework 2.ios8以后,如果需要使用定位功能,就需要请求用户授权,首次运行时会弹框提示 3.通过本机自带gps获取位置信息(即经纬度) 七、苹果内购实现流程...八、支付宝,微信等相关类型sdk集成 1.支付宝开发平台创建应用并获取APPID 2.配置密钥 3.集成并配置SDK 4.调用接口(如交易查询接口,交易退款接口) 九、 gcd产生死锁原因及解锁方法

    85100

    iOS CPU异步绘制流程

    上打上一个标记,然后会在当前runloop将要结束时候(下一个绘制周期)调用[CALayer display]这个方法,然后进入我们视图真正绘制过程 [CALayer display]这个方法内部实现中会判断这个...layerdelegate是否响应displayLayer:这个方法,如果响应这个方法,就会进入到系统绘制流程中;如果不响应这个方法,那么就会为我们提供异步绘制入口 异步绘制中,会先判断代理是否有实现协议...drawLayer:inContext方法,如果有实现,就会创建一个空寄宿图和Core Craphics绘制上下文,为绘制寄宿图做准备,然后会在一个合适时候调用一个我们非常熟悉方法[UIView...drawRect:]来获取寄宿图内容。...[UIView drawRect:]这个方法默认是什么都不做,系统给我们开这个口子是为了让我们可以再做一些其他绘制工作 无论是哪个分支,最终都会由CALayer上传对应backing store

    72950

    iOS 之 异步绘制原理

    具体过程是系统会把 UIView 显示内容(包括 UILabel 文字,UIImageView 图片等)绘制一张画布上,完成后倒出图片赋值给 CALayer contents 属性,完成显示...解决方案使用异步绘制就是: 把 UIView 显示内容(包括 UILabel 文字,UIImageView 图片等)绘制生成 bitmap 子线程完成。... UIView 中 layer.delegate 就是 UIView 本身,UIView 并没有实现 displayLayer: 方法,所以进入系统绘制流程,我们可以通过实现 displayLayer...然后合适时机回调代理,调用 drawRect 默认操作是什么都不做(而之所以有这个接口,就是为了让我们系统绘制之后,还可以做些自定义绘制工作)。...dispatch_get_global_queue(0, 0), ^{ UIGraphicsBeginImageContextWithOptions(size, NO, scale); // 获取当前上下文

    3.2K30

    iOS学习——Quartz2D学习之UIKit绘制

    IOS上无论采用哪种绘图技术(UIKit、Quartz 2D、Core Animation和OpenGL ES),都离不开UIView,绘制都发生在UIView对象区域内。...绘制发生时候如果使用是系统提供视图,绘制工作会自动得到处理。然而,如果是自定义视图,则必须重写drawRect:方法,在此提供相应绘制代码。...一旦drawRect:方法被调用,就可以使用任何UIKit、Quartz 2D、OpenGL ES等技术对视图内容进行绘制了。   ...因为想要把一个东西画到View上面,必须获得该view上下文上下文只有DrawRect方法中才能拿到。 4、drawAtPoint: withAttributes:底层实现是怎样?...drawAtPoint: withAttributes:底层也是同样也是按以下着步骤来: 第一步:获取上下文 第二步:拼接路径 第三步:把路径添加到上下文 第四步:渲染上下文到View     所以

    1.5K20

    绘图-Core Graphics

    iOS有分多种图形上下文,其中UIView自带提供drawRect:方法中通过UIGraphicsGetCurrentContext获取,还有专门为图片处理context,UIGraphicsBeginImageContext...简述 绘图步骤:(drawRect函数中) 1.获取绘图上下文 2.创建并设置路径 3.将路径添加到上下文 4.设置上下文状态 5.绘制路径 6.释放路径 使用Core Graphics...时有许多方式获得一个图形上下文,这里我介绍两种最为常用获取方法 第一种方法就是创建一个图片类型上下文。...当你子类化了一个UIView并实现了自己drawRect方法后,一旦drawRect方法被调用,Cocoa就会为你创建一个图形上下文,此时你对图形上下文所有绘图操作都会显示UIView上。...这样做目的,是因为对上下文进行变换会改变上下文整体坐标系,如果在变换上下文前,不进行保存,之后也恢复的话,再在此上下文绘图,就会按照新变化后坐标系绘图,从而发生混乱。

    1.6K30
    领券