OC开发_Storyboard——绘制和视图
1、绘制
不要调用drawRect.调用setNeedsDisplay相当于告知系统视图需要重绘, 它会去调用drawRect,更新屏外缓冲器
2、UIBezierPath绘制图形,
设置图像opaque属性=no,根据透明度一层层合成视图,比直接修改比特值的开销会大很大多,消耗性能
如果只是显示的问题可以通过设置hidden
3、UIGestureRecognizer
setNeedDisplay是为了让有人修改时重绘 ,据目标大小,选择合适尺寸
现在利用绘制做一个小demo,效果如下图,有一个黑色边缘的圆角:

代码如下:
ModelView.m
//
// ModelView.m
// testForRouteAngle
//
// Created by bos on 15-4-16.
// Copyright (c) 2015年 axiba. All rights reserved.
// #import "ModelView.h" @implementation ModelView #define HEIGHT 180.0 //高度的标准值
#define RADIOS 12.0 //半径 -(CGFloat)cornerScaleFactor {return self.bounds.size.height/HEIGHT;}
-(CGFloat)cornerRadius{ return RADIOS *[self cornerScaleFactor];}
-(CGFloat)cornerOffset{ return [self cornerRadius] / 3.0;} -(void)drawRect:(CGRect)rect
{
//所绘制范围的坐标系
//cornerRadius :圆角矩形的圆角的半径有多少个点
UIBezierPath *roundrect = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:[self cornerRadius]]; //裁剪
[roundrect addClip]; //填充色
[[UIColor whiteColor] setFill];
UIRectFill(self.bounds); //**边缘添加一圈黑色边框**// //设置描边颜色
[[UIColor blackColor]setStroke];
//让roundrect也就是被塞尔路径描边
[roundrect stroke];
} #pragma storyBoard 中需要用 awake来唤醒加载,不用alloc/init
-(void)awakeFromNib
{
self.backgroundColor = nil;
self.opaque = NO; //如果bounds变化来,就调用drawrect
self.contentMode = UIViewContentModeRedraw;
} /*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/ @end
demo需要注意的地方:
1、我们往storyBoard是拉进去一个UIView,然后新建一个继承自UIVIEW的文件,所以文件和控件的之间的连接,还需要通过设置class
2、设置圆角需要一个高度标准、半径,具体看代码设置,可以复用
OC开发_Storyboard——绘制和视图的更多相关文章
- OC开发_Storyboard——视图控制生命周期以及NSNotifications
一.生命周期 1.ViewDidLoad: 一般的初始化,除了几何图形的初始化(这个时候还没确定) 2.ViewWillAppear: 代表你的视图将要在屏幕上显示,可能会调用多次,对不可见时可能能改 ...
- OC开发_Storyboard——iPad开发
iPad开发(Universal Applications) 一.iPad 1.判断是否在iPad上 BOOL iPad = ([[UIDevice currentDevice] userInterf ...
- OC开发_Storyboard——MapKit
一.Core Location 1.基本对象 @propertys: coordinate, altitude, horizontal/verticalAccuracy, timestamp, sp ...
- OC开发_Storyboard——AutoLayout
一.autolayout 自动布局: 1. 设置所有视图框架的三种方法,可以通过代码创建也可以storyboard设置 = 规则 (1 蓝线+约束:(位置) 使用蓝线,根据蓝线拖动控件,只是告诉Xco ...
- OC开发_Storyboard——block和动画
一.协议 @optional :可选的 @requied :必须实现的 二.block 代码块 1. 以一个^开头,然后是参数,然后是一个大括号,包含我们的代码块 [aDictionary enu ...
- OC开发_Storyboard——多线程、UIScrollView
一.多线程 1.主队列:处理多点触控和所有UI操作(不能阻塞.主要同步更新UI) dispatch_queue_t mainQueue = dispatchg_get_main_queue(); // ...
- OC开发_Storyboard——UITableView
一.tableView 1.datasource数据源 (1 构造每一个tableVIewCell的方法:cellForRowAtIndexPath,这里的 dequeueReusableCellWi ...
- OC开发_Storyboard——Core Data
一 .NSManagedObjectContext 1.我们要想操作Core Data,首先需要一个NSManagedObjectContext2.那我们如何获得Context呢:创建一个UIMana ...
- OC开发_Storyboard——UIApplication和网络活动指示器
一.UIApplication 只有一个实例: UIApplication *myApplication = [UIApplication sharedApplication]; 属性如果设置为YES ...
随机推荐
- MapReduce生成HFile入库到HBase
转自:http://www.cnblogs.com/shitouer/archive/2013/02/20/hbase-hfile-bulk-load.html 一.这种方式有很多的优点: 1. 如果 ...
- Linux如何通过命令查看日志文件的某几行(中间几行或最后几行)
linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...
- zqgame《每日一言》
优秀决策者九特质1.能够接受不确定性:2.做事懂得轻重缓急:3.善于聆听:4.能够长远地看问题:5.能够看到大局,以大局为重:6.做事不优柔寡断,干脆利索.立即行动:7.善于独立思考:8.能充分调动团 ...
- android 编译 app
有些编写的app需要放到android的源码中进行编译.放置的路径packages/apps/ 编译方法,参考 http://blog.csdn.net/luoshengyang/article/de ...
- e673. Getting Amount of Free Accelerated Image Memory
Images in accelerated memory are much faster to draw on the screen. However, accelerated memory is t ...
- e1086. if/else语句
The if statement encloses some code which is executed only if a condition is true. The general synta ...
- Zookeeper 工作流
一旦ZooKeeper集合启动,它将等待客户端连接.客户端将连接到ZooKeeper集合中的一个节点.它可以是leader或follower节点.一旦客户端被连接,节点将向特定客户端分配会话ID并向该 ...
- java动态代码的实现以及Class的卸载 (转至http://dustin.iteye.com/blog/46393)
JavaWorld一篇题为 Add dynamic code to your application 的文章介绍了如何使用动态代理技术使普通的java源代码具有像jsp一样的动态编译效果,十分有趣. ...
- CentOS tree命令详解
inux下tree命令详解---linux以树状图逐级列出目录的内容命令 ############################################################### ...
- 搞笑的<Button></Button>
<button>竟然默认是submit按钮</button>.........................