精华内容
下载资源
问答
  • DrawRect

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





    再说明一下重绘,重绘操作仍然在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实时刷新屏幕

    展开全文
  • drawRect

    2015-08-14 11:56:00
    有了view的子类,只要重载一个方法drawRect -(void)drawRect:(CGRect)aRect; 它的参数是个矩形,这个矩形就是你要重绘的区域,你可以忽略参数,它只是为了性能优化,只在固定的区域绘图. 注意!!! 永远不要去...

    有了view的子类,只要重载一个方法drawRect

    -(void)drawRect:(CGRect)aRect;

    它的参数是个矩形,这个矩形就是你要重绘的区域,你可以忽略参数,它只是为了性能优化,只在固定的区域绘图.

    注意!!!

    永远不要去调用drawRect,因为drawRect不是让你调用的,而是系统会去调用的.

    那怎么去告诉系统需要重绘呢?

    你发送两个消息,setNeedsDisplay和setNeedsDisplayInRect.

    -(void)setNeedsDisplay;

    -(void)setNeedsDisplayInRect:(CGRect)aRect;

    你们可以认为初始化的时候的设置是一个点,然后晚些系统查看所有需要重绘的东西,

    然后把它们按顺序排列,因为有些东西可能会重叠,然后再非常高效的把需要的东西绘制出来.

     

    这样做有两个好处,一是让系统依据层的情况最优化性能,

    二是如果你的property有一些setter,当你设置的时候需要重绘,这种情况也被最优化了.

    所以你所有的setter都会调用self的setNeedsDisplay来重绘.

     

    如果有人用了你的view,然后调用了好几个这样的setter,只需要重绘一次.

    每个setNeedsDisplay都被一起传过去,然后一次性画出来.而不是每次都重绘.

     

    环境(Context)决定了你在哪绘图,所以你创建环境的方法决定了要在哪绘图.

    关于这个环境要注意的有一点,每次调用drawRect环境都是不一样的,所以不要把它保存起来,而是每次都去获取新的,

    CGContextRef context = UIGraphicsGetCurrentContext();

    这就是调用的方法,这也几乎是每个drawRect的第一行.

    CGContextRef 是个cookie,不知道到底是什么,它不是个对象,因为没有*

    当你有了环境,就可以用它来建立轨迹了,

    这里就演示一个轨迹的例子,用CGContextBeginPath(context)来传递刚刚得到的环境,

    然后就可以进行移动、添加直线弧线之类的了,

    下面的几行代码就创建了右边的那个轨迹,

    CGContextMoveToPoint(context , 75 , 10);

    CGContextAddLineToPoint(context , 160 ,150);

     

    CGContextAddLineToPoint(context , 10 ,150);

     

    再说一次左上角是(0 , 0),画轨迹而不是缩放, 

    还有CGContextClosePath(context); 它会画条线回到起始点来封闭图形,

    封闭图形不是必须的,你可以画个开放的.

     

    上面做的这些看起来像是在绘画,但是只有上面几行代码的话其实什么也没画,虽然轨迹被创建了,但是没有真的画到屏幕上,

    为什么会这样呢?因为你需要 描边(stroke) 或者 填充(fill) 来显示轨迹,

    在描边或设置填充之前,还可以设置图形属性,这里用了UIColor设置颜色.

    [ [ UIColor greenColor]  setFill];

    [ [ UIColor redColor] setStroke];

    注意在用这个UIColor的时候不需要指出它的环境,当你在使用对象的时候,事实上你只用到UIColor,UIFont,NSString.

     

    这里你使用对象的时候不用指出它的环境,它会假设你用的是当前环境,只要在前面的CGContext表面环境就可以了.

    但是这里设置了描边和填充,还是什么都没画,还需要调用CGContextDrawPath

    CGContextDrawPath(context , kCGPathFillStroke);

    这个参数kCGPathFillStroke是常量标志,表示描边和填充还是仅描边或仅填充.

     

    其实还可以建立一个轨迹,保存到一个轨迹变量CGPath,使用完之后还能交给其他环境继续用,

    更多功能,需要去查看文档来使用.

     

    Graphics State 

    图形状态,你用的最主要的是颜色,但你可以用一些复杂的,比如线宽、图案填充等,

    CGContextSetLineWidth(context , 1.0);

    CGContextSetFillPattern(context , (CGPatternRef)pattern , (CGFloat [] )components );

    图形状态有一点要小心的就是子程序(subroutines),因为比如我有了一个新环境然后设置它的图形状态,

    那么这时候我调用的子程序会怎么样呢?

    子程序里面也有自己的图形状态,这就和我的设置冲突了,

    所以对此有个机制叫push和pop环境,

    UIGraphicsPopContext();

    所以我就对开始的那个环境入栈,然后再做我要做的绘图,

    然后在出栈回到调用子程序之前的环境,

     

    在drawRect里面绘制图片

    UIImage *image="";

    [image drawAtPoint:(CGPoint) p ];//按原大小绘图

    [image drawInRect:(CGRect) r ];//会缩放图片

    [image drawAsPatternInRect:(CGRect) pathRect];//会重复绘图以填满指定的矩形区域

    你还可以用PNG或者JPG格式的二进制数据来表示图片:

     

    转载于:https://www.cnblogs.com/lhx2015/p/4729597.html

    展开全文
  • drawrect

    2016-01-08 22:35:24
    // 1. 获取当前的图形上下文  CGContextRef ctx = UIGraphicsGetCurrentContext();    // 2. 在上下文中绘制图形(拼接路径)  // 2.1 设置一个起点  ... // 2.2 添加一条直线


         // 1. 获取当前的图形上下文

         CGContextRef ctx = UIGraphicsGetCurrentContext();

         

         // 2. 在上下文中绘制图形(拼接路径)

         // 2.1 设置一个起点

         CGContextMoveToPoint(ctx, 20, 20);

         // 2.2 添加一条直线到(100, 100)这个点

         CGContextAddLineToPoint(ctx, 100, 20);

         

         

         // 2.3 再重新设置一个起点

         CGContextMoveToPoint(ctx, 5, 50);

         // 2.4 再添加一条线

         CGContextAddLineToPoint(ctx, 115, 50);

         

         

         // 3. 把上下文渲染显示

        // StrokePath 表示把路径以空心的形式渲染出来。

         CGContextStrokePath(ctx);

     }


    展开全文
  • DrawRect 图形

    2019-10-07 23:04:19
    1 DrawRect 2 3 - (void)drawRect:(CGRect)rect 4 5 { 6 7 // Drawing code 8 9 // 当前视图绘制信息 10 11 CGContextRef context = UIGraphicsGetCurrentContext(); 12 13 ...
     1 DrawRect
     2 
     3 - (void)drawRect:(CGRect)rect
     4 
     5 {
     6 
     7     // Drawing code
     8 
     9     // 当前视图绘制信息
    10 
    11     CGContextRef context = UIGraphicsGetCurrentContext();
    12 
    13     // 设置线条的宽度
    14 
    15     CGContextSetLineWidth(context, 5);
    16 
    17     // 设置线条的颜色
    18 
    19     CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
    20 
    21 //    // 设置线的起点
    22 
    23 //    CGContextMoveToPoint(context, 0, 0);
    24 
    25 //    // 设置一条直线(规定线的终点)
    26 
    27 //    CGContextAddLineToPoint(context, 280, 280);
    28 
    29 //    // 设置正方形
    30 
    31 //    CGContextAddRect(context, CGRectMake(20, 20, 240, 240));
    32 
    33 //   // 根据绘制信息 在视图上绘制图形
    34 
    35 //    CGContextStrokePath(context);
    36 
    37     
    38 
    39     for (int i = 0; i < self.lineArray.count; i++) {
    40 
    41         NSMutableArray *points = [self. lineArray objectAtIndex:i];
    42 
    43         if (0 == points.count) {
    44 
    45             continue;
    46 
    47         }
    48 
    49         for (int j = 0; j < points.count - 1; j++) {
    50 
    51             NSValue *pointValueA = [points objectAtIndex:j];
    52 
    53             NSValue *pointValueB = [points objectAtIndex:j + 1];
    54 
    55             
    56 
    57             CGPoint pointA = [pointValueA CGPointValue];
    58 
    59             CGPoint pointB = [pointValueB CGPointValue];
    60 
    61             
    62 
    63             CGContextMoveToPoint(context, pointA.x, pointA.y);
    64 
    65             CGContextAddLineToPoint(context, pointB.x, pointB.y);
    66 
    67         }
    68 
    69     }
    70 
    71     CGContextStrokePath(context);
    72 
    73 }

     

    转载于:https://www.cnblogs.com/-Eric-Liu/p/5563942.html

    展开全文
  • drawRect-饼状环形图

    2017-01-18 13:37:30
    drawRect
  • drawRect 进阶

    2016-04-05 12:31:32
    iOS的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个扩展UIView 的类,并重写drawRect方法,在这里进行绘图操作,程序会自动调用此方法进行绘图。 下面先说明一下...
  • drawRect方法

    2016-07-22 15:17:00
    ios 绘图操作是在drawrect方法中进行的,如果我们需要在uiview中绘图,需要重写drawrect方法,当然不需要我们手动调用此方法,我们可以通过以下途径调用drawrect: 1.controller中,在viewdidload,loadView之后会...
  • matlab开发-DrawRect

    2019-08-27 15:15:03
    matlab开发-DrawRect。在具有给定颜色(“R”、“G”或“B”)的输入图像上绘制1像素矩形。
  • drawRect与CALayer

    2020-05-10 09:13:56
    setNeedsDisplay会调用(drawRect)方便绘图和setNeedsLayout会调用(layoutSubViews)方便出来数据 UIView的setNeedsDisplay和setNeedsLayout方法。首先两个方法都是异步执行的。setNeedsDisplay会调用自动调用drawRect...
  • 使用 drawRect 方法自定义注释视图 —— 这是使用自定义drawRect方法的自定义MKAnnotationView子类的演示。 这在。 这仅用于说明目的。 在 Xcode 6.3 中为 iOS 8.3 开发。 UIAlertController警报的使用,这也应该...
  • ios drawRect

    2014-01-11 22:56:54
    Phone重绘机制drawRect 如何使用iPhone进行绘图、重绘操作 iPhone的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个扩展UIView 的类,并重写drawRect方法,在...
  • drawRect的解释

    2012-11-02 08:40:05
    这个是关于drawRect的解释,不会的可以看看哈
  • 主要为大家详细介绍了IOSdrawRect实现雪花飘落效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 内存恶鬼drawRect

    2019-10-08 01:39:41
    标题有点吓人,但是对于drawRect的评价倒是一点都不过分。在平日的开发中,随意覆盖drawRect方法,稍有不慎就会让你的程序内存暴增。下面我们来看一个例子。 去年的某天午后,做了一个画板功能,但是苦于内存问题...
  • drawRect显示问题

    2018-04-09 18:25:04
    赋值数据的时候[self setNeedsDisplay]; drawRect只会调用一次,如果需要根据外界的值进行改变,就需要调用setNeedsDisplay,该方法会自动调用drawRect方法
  • 绘图drawrect

    2015-03-04 11:37:16
    通过对ios开发ui篇的学习 总结了drawrect的方法和使用  新建一个项目,自定义一个view类和storyboard关联后,重写该类中的drowrect方法。 画线的三个步骤: (1)获取上下文 (2)绘图 (3)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,658
精华内容 1,463
关键字:

drawrect