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 ...
随机推荐
- Error -27740: WSA_IO_pending
Error -27740: WSA_IO_pendingAction.c(198): Error -27791: Server **** has shut down the connection pr ...
- 继电器是如何成为CPU的
阅读目录(Content) 从电池.开关和继电器开始 用继电器做个与门 用继电器做个或门 用继电器做个异或门 做一些看起来可用的东西 小小约定 振荡器 加法器 寄存器 R-S触发器 D触发器 上升沿D ...
- glob函数 循环遍历子目录下的文件
<?php foreach (glob("ueditor\php\upload\image\*\*.png") as $filename) { echo "$fil ...
- i2c驱动笔记
基于bcm5300x芯片 注册平台总线设备,设备名bcm5300x_i2c,通过名称与驱动进行匹配. 注册平台总线驱动.驱动名称"bcm5300x_i2c",与设备进行匹配. dr ...
- snmp trap编写
1.MIB库查看net-snmp的安装目录./usr/share/snmp/mibs目录下: NET-SNMP-EXAMPLES-MIB.mib本件部分内容如下: netSnmpExampleHear ...
- 散货:null 强转 和 iOS null崩溃
问题1 在看 SpringMVC源码剖析(五)-消息转换器HttpMessageConverter 的时候,在 org.springframework.web.servlet.mvc.method ...
- PHP 初学
虚拟目录和虚拟主机的关系?虚拟主机可以设置多个,虚拟目录呢? 以为phpstorm和Intellij一样,结果不是!它直接将所有内容上传(部署)到服务器即可,不像Intellij那样还调用服务器?? ...
- HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenCV和OpenCL区别
1 扩展库简介 OpenCV(Open Source Computer Vision Library)是一个致力于实时处理计算机视觉问题的开源库.它最初由Intel公司开发,以GPL许可协议发布,后来 ...
- c#后台访问接口
直接上代码 后台代码 //接口地址string url = "http://spherefg.topsmoon.com:6666/restapi/Comment/SubmitCommentF ...
- js正则表达式的基本语法
1.正则表达式基本语法 创建正则表达式 var re = new RegExp();//RegExp是一个对象,和Aarray一样 //但这样没有任何效果,需要将正则表达式的内容作为字符串传递进去 r ...