OC开发_Storyboard——绘制和视图

1、绘制

  不要调用drawRect.调用setNeedsDisplay相当于告知系统视图需要重绘, 它会去调用drawRect,更新屏外缓冲器

2、UIBezierPath绘制图形,
   设置图像opaque属性=no,根据透明度一层层合成视图,比直接修改比特值的开销会大很大多,消耗性能
   如果只是显示的问题可以通过设置hidden

3、UIGestureRecognizer

     setNeedDisplay是为了让有人修改时重绘 ,据目标大小,选择合适尺寸

 

 现在利用绘制做一个小demo,效果如下图,有一个黑色边缘的圆角:


 OC开发_Storyboard——绘制和视图

代码如下:

ModelView.m

 1 //

 2 //  ModelView.m

 3 //  testForRouteAngle

 4 //

 5 //  Created by bos on 15-4-16.

 6 //  Copyright (c) 2015年 axiba. All rights reserved.

 7 //

 8 

 9 #import "ModelView.h"

10 

11 @implementation ModelView

12 

13 #define HEIGHT 180.0  //高度的标准值

14 #define RADIOS 12.0  //半径

15 

16 -(CGFloat)cornerScaleFactor {return  self.bounds.size.height/HEIGHT;}

17 -(CGFloat)cornerRadius{ return RADIOS *[self cornerScaleFactor];}

18 -(CGFloat)cornerOffset{ return  [self cornerRadius] / 3.0;}

19 

20 -(void)drawRect:(CGRect)rect

21 {

22     //所绘制范围的坐标系

23     //cornerRadius :圆角矩形的圆角的半径有多少个点

24     UIBezierPath *roundrect = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:[self cornerRadius]];

25     

26     //裁剪

27     [roundrect addClip];

28     

29     //填充色

30     [[UIColor whiteColor] setFill];

31     UIRectFill(self.bounds);

32     

33     //**边缘添加一圈黑色边框**//

34     

35     //设置描边颜色

36     [[UIColor blackColor]setStroke];

37     //让roundrect也就是被塞尔路径描边

38     [roundrect stroke];

39 }

40 

41 #pragma  storyBoard 中需要用 awake来唤醒加载,不用alloc/init

42 -(void)awakeFromNib

43 {

44     self.backgroundColor = nil;

45     self.opaque = NO;

46     

47     //如果bounds变化来,就调用drawrect

48     self.contentMode = UIViewContentModeRedraw;

49 }

50 

51 

52 /*

53 // Only override drawRect: if you perform custom drawing.

54 // An empty implementation adversely affects performance during animation.

55 - (void)drawRect:(CGRect)rect {

56     // Drawing code

57 }

58 */

59 

60 @end

 

demo需要注意的地方:

1、我们往storyBoard是拉进去一个UIView,然后新建一个继承自UIVIEW的文件,所以文件和控件的之间的连接,还需要通过设置class

2、设置圆角需要一个高度标准、半径,具体看代码设置,可以复用

你可能感兴趣的:(视图)