`
浮生长恨
  • 浏览: 212812 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Phone重绘机制drawRect(转)

阅读更多

Phone重绘机制drawRect


如何使用iPhone进行绘图、重绘操作
iPhone的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个扩展UIView 的类,并重写drawRect方法,在这里进行绘图操作,程序会自动调用此方法进行绘图。


下面先说明一下绘图,比如,你想绘制一个方块,你需要写一个类来扩展UIView并在drawRect方法中填入如下代码:


- (void)drawRect:(CGRect)rect {  
    // Drawing code.  
    //获得处理的上下文    
    CGContextRef context = UIGraphicsGetCurrentContext();    
    //设置线条样式    
    CGContextSetLineCap(context, kCGLineCapSquare);     
    //设置线条粗细宽度    
    CGContextSetLineWidth(context, 1.0);     
    
    //设置颜色    
    CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);     
    //开始一个起始路径    
    CGContextBeginPath(context);     
    //起始点设置为(0,0):注意这是上下文对应区域中的相对坐标,    
    CGContextMoveToPoint(context, 0, 0);     
    //设置下一个坐标点    
    CGContextAddLineToPoint(context, 100, 100);     
    //设置下一个坐标点    
    CGContextAddLineToPoint(context, 0, 150);    
    //设置下一个坐标点    
    CGContextAddLineToPoint(context, 50, 180);    
    //连接上面定义的坐标点    
    CGContextStrokePath(context);  
      
}  


再说明一下重绘,重绘操作仍然在drawRect方法中完成,但是苹果不建议直接调用drawRect方法,当然如果你强直直接调用此方法,当然是没有效果的。苹果要求我们调用UIView类中的setNeedsDisplay方法,则程序会自动调用drawRect方法进行重绘。(调用setNeedsDisplay会自动调用drawRect)


在UIView中,重写drawRect: (CGRect) aRect方法,可以自己定义想要画的图案.且此方法一般情况下只会画一次.也就是说这个drawRect方法一般情况下只会被掉用一次. 
当某些情况下想要手动重画这个View,只需要掉用[self setNeedsDisplay]方法即可.
drawRect掉用是在Controller->loadView, Controller->viewDidLoad 两方法之后掉用的.所以不用担心在控制器中,这些View的drawRect就开始画了.这样可以在控制器中设置一些值给View(如果这些View draw的时候需要用到某些变量值).


1.如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。
2.该方法在调用sizeThatFits后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。
3.通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。
4.直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0.
以上1,2推荐;而3,4不提倡




1、若使用UIView绘图,只能在drawRect:方法中获取相应的contextRef并绘图。如果在其他方法中获取将获取到一个invalidate的ref并且不能用于画图。drawRect:方法不能手动显示调用,必须通过调用setNeedsDisplay 或者 setNeedsDisplayInRect ,让系统自动调该方法。
2、若使用calayer绘图,只能在drawInContext: 中(类似鱼drawRect)绘制,或者在delegate中的相应方法绘制。同样也是调用setNeedDisplay等间接调用以上方法。
3、若要实时画图,不能使用gestureRecognizer,只能使用touchbegan等方法来掉用setNeedsDisplay实时刷新屏幕

 

原地址:http://blog.csdn.net/chengyakun11/article/details/7565720

分享到:
评论

相关推荐

    Duilib 控件重绘教程附带例子

    本教程将重点讲解如何在Duilib中进行控件的重绘,以实现自定义的视觉效果。 控件重绘是Duilib中实现界面个性化的重要手段。通过重绘,我们可以改变控件的默认外观,比如修改边框样式、调整颜色、添加图案或者动画...

    IOS重绘View演示

    本文将深入探讨`drawRect:`方法及其在iOS重绘视图中的应用,以及与Quartz 2D图形库的结合使用。首先,我们需要理解`drawRect:`方法的原理。 `drawRect:`是UIKit框架中的一个方法,它属于UIView类。当一个UIView的`...

    ios - 文本重绘

    本文将深入探讨iOS中的文本重绘机制,以及如何利用`HZMCoreText`库来实现更精细的文本控制。 首先,我们要理解iOS中的文本渲染机制。默认情况下,UIKit框架负责UI组件的渲染,包括UILabel、UIButton等,它们内置了...

    iOS的Swift中drawRect:的使用

    `drawRect:`是UIView类的一个方法,它的原型是`override func drawRect(rect: CGRect)`, 其中`rect`参数代表了需要重绘的矩形区域。当视图需要更新其显示内容时,系统会自动调用这个方法。开发者可以在这个方法内部...

    画布的重绘和保存

    以上就是关于“画布的重绘和保存”的详细解释,希望对你理解Android图形绘制和保存机制有所帮助。在实际应用中,还需注意性能优化,如合理使用Bitmap配置以减少内存消耗,以及处理保存过程中的异常情况。

    MFC CButton按钮重绘(GDI篇)

    总结来说,MFC中的CButton控件可以通过重绘机制实现自定义外观,结合GDI的功能可以绘制出各种复杂的按钮样式。对于不规则形状的按钮,利用PNG图片的透明特性,可以轻松实现视觉上的创新设计。在实际项目中,这样的...

    iOS的Object-C中drawRect:的使用

    - **精确重绘**:尽可能准确地指定需要重绘的区域,通过`setNeedsDisplayInRect:`指定一个较小的矩形,而不是整个视图,可以提高性能。 在YMDrawRectTest项目中,你可能会看到一个简单的示例,展示如何在自定义...

    IOS drawRect 自定义绘图,自定义任意类型的图形和动画

    虽然`drawRect:` 不直接支持动画,但可以结合其他动画框架,如`CADisplayLink`或`UIView`的`animate(withDuration:animations:)`方法,在每次动画更新时重绘视图,以实现动态效果。 8. **性能优化**: 注意,`...

    Qt重绘控件之移动信号

    总结来说,Qt的控件重绘机制为我们提供了极大的灵活性,允许我们在图形用户界面中创建具有独特视觉效果的组件。`SigDisplay`类就是一个很好的示例,展示了如何结合实际业务需求,利用Qt的绘图功能来定制控件的行为。

    drawRect的解释

    drawRect的解释 drawRect是Android Canvas类中的一种绘制矩形的方法,用于在Canvas上绘制矩形。下面是drawRect的解释: drawRect的基本用法 drawRect方法的基本用法是`canvas.drawRect(RectF rect, Paint paint)`...

    matlab开发-DrawRect

    本项目名为"matlab开发-DrawRect",旨在提供一个简单但实用的功能,即在图像上绘制1像素宽度的矩形。这个功能通过指定颜色("R"、"G"或"B"代表红色、绿色或蓝色)来改变矩形的显示效果,增加了图像标注和分析的灵活...

    Quartz 2D重绘帧示例代码

    然而,频繁地调用`drawRect:`可能导致性能问题,因为每次调用都会触发一次屏幕重绘。为了优化性能并确保流畅的用户体验,开发者需要理解如何正确管理重绘帧。 首先,了解`CALayer`的`needsDisplay`属性很重要。当这...

    flex 鼠标 drawRect 画矩形

    flex 鼠标 drawRect 画矩形

    Android eclipse画板绘制不同颜色图形,有助于初学Android的童鞋了解Android绘图机制

    canvas.drawRect(50, 50, 200, 200, paint); // 绘制矩形 } ``` 除了矩形,我们还可以绘制其他形状,如圆和线: ```java // 绘制蓝色圆形 paint.setColor(Color.BLUE); paint.setStrokeWidth(5); // 设置边框宽度...

    Android绘图机制与处理技巧(一)——Android绘图技巧

    - `drawRect()`: 绘制矩形。 - `drawCircle()`: 绘制圆形。 - `drawLine()`: 绘制线段。 - `drawText()`: 在指定位置绘制文本。 - `drawBitmap()`: 绘制位图。 - `save()` 和 `restore()`: 保存和恢复绘图状态...

    一个冲回btn的重绘类,挺实用的

    "冲回btn的重绘类"可能是指这个自定义类通过覆写`onDraw()`方法来改变按钮的绘制方式,以实现独特的设计风格,比如自定义背景颜色、边框、阴影、渐变效果等。 在Android中,我们可以创建一个自定义View类,继承自...

    Qt重绘控件之旧版苹果手机信号

    在Qt框架中,控件的重绘是通过覆盖默认的paintEvent()函数来实现的,这个功能在创建自定义UI元素时尤其有用。本例中,“Qt重绘控件之旧版苹果手机信号”是一个使用Qt和Visual Studio(Vs)开发的项目,它模拟了旧版...

    DrawRect Demo代码

    因此,我们应该尽量减少`drawRect:`的调用,仅在必要时进行重绘。可以通过设置`needsDisplay`属性或者调用`setNeedsDisplay()`方法来控制视图的重绘。 5. **其他绘图操作**:除了矩形,`drawRect:`还可以用来绘制更...

    DrawRect0905.rar

    在IT行业中,尤其是在图形用户界面(GUI)开发领域,`DrawRect`是一个常见的函数或方法,用于在屏幕上绘制矩形。这个"DrawRect0905.rar"文件可能包含了一个关于如何在Qt框架下使用`DrawRect`进行图形绘制的教学资料...

    DrawRect0909.rar

    在IT行业中,尤其是在软件开发领域,Qt是一个非常重要的库,尤其在C++编程中被广泛使用。这个"DrawRect0909.rar"文件很可能包含了关于使用Qt...通过深入理解Qt的绘图机制,开发者可以创建出美观且功能强大的应用程序。

Global site tag (gtag.js) - Google Analytics