美文网首页
视图绘制

视图绘制

作者: 皮蛋豆腐酱油 | 来源:发表于2019-10-29 16:19 被阅读0次

视图绘制是调用drawRect:方法来实现的。对于AppKit中的各种界面控件,系统默认实现了不同控件的界面绘制和事件响应控制,对于自定义的控件可以在drawRect方法中实现界面的个性化绘制。

drawRect方法中实现界面绘制
从性能方面考虑系统对界面绘制采用了延时绘制机制进行的。调用setNeedsDisplay:或setNeedsDisplayInRect:方法,使当前视图或Rect定义的区域变为invalidate状态,并不是立即绘制,系统会在下一个绘图周期重绘。

调用display,displayRect: 方法会强制视图立即重绘。

下面的代码使用Quartz 2D的绘图函数实现了在视图上绘制圆角矩形。

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];
    
    [[NSColor blueColor] setFill];
    NSRect  bounds = [self bounds];
    
    NSBezierPath *roundedShape = [NSBezierPath bezierPath];
    [roundedShape appendBezierPathWithRoundedRect:bounds xRadius:20 yRadius:20];
    [roundedShape fill];
}

drawRect方法之外实现绘制
在drawRect方法之外需要绘制视图时,需要使用lockFocus方法锁定视图,完成绘制后在执行unlockFocus解锁。如果在执行lockFocus时已经有其他流程执行了lockFocus,则会将当前操作保存到队列中,等待其他流程执行unlockFocus来恢复后来的lockFocus中的绘图操作。

- (void)updateViewShape {
    [self lockFocus];
    //绘图相关代码
    [self unlockFocus];
}

参考自《MacOS应用开发基础教程》

相关文章

  • 常见面试问题概括

    UI视图相关 *TableView重用机制? 答: *视图绘制原理?如何实现异步绘制? 答:UIView绘制原理 ...

  • Android-自定义View

    [1] Android如何绘制视图? 当用户将Android视图引入焦点时,Android框架会引导视图进行绘制。...

  • OpenGL ES(GLKView+GLKViewControl

    GLKView使用OpenGL ES绘制内容的视图默认实现 1:初始化视图 context 绘制视图内容时使⽤用的...

  • Android单排上王者系列之Android性能优化

    Android视图的绘制流程 Android中视图的绘制会经历三个阶段即onMeasure()、onLayout(...

  • 视图绘制

    本文要点 事件传递视图响应图像显示原理卡顿掉帧原因绘制&异步绘制离屏渲染 先看一下UIView和CALayer区别...

  • 绘制视图

    一直没有一个好的绘制视图的笔记,今天整理一下,分享给大家:不多说,直接上代码。 一、核心绘图(C语言风格调用函数)...

  • 绘制视图

    当我们想要重绘某个视图的时候,我们不能直接调用drawRect:的方法,因为该方法为系统自动调用,我们手动调用无效...

  • 视图绘制

    视图绘制是调用drawRect:方法来实现的。对于AppKit中的各种界面控件,系统默认实现了不同控件的界面绘制和...

  • # UI视图相关

    UI视图相关 UITableView 事件传递&视图响应 图像显示原理 卡顿&掉帧 绘制原理&异步绘制 离屏渲染 ...

  • Metal 基本任务和概念 - 02

    使用金属绘制视图内容 创建一个MetalKit视图和一个渲染过程以绘制视图的内容。 概述 在此示例中,您将学习使用...

网友评论

      本文标题:视图绘制

      本文链接:https://www.haomeiwen.com/subject/hqdgvctx.html