详解iOS开发之自定义View
iOS开发之自定义View是本文要将介绍的内容,iOS SDK中的View是UIView,我们可以很方便的自定义一个View。创建一个 Window-based Application程序,在其中添加一个Hypnosister的类,这个类选择继承UIObject。修改这个类,使他继承:UIView
- @interface HypnosisView : UIView
自定义View的关键是定义drawRect: 方法,因为主要是通过重载这个方法,来改变view的外观。例如,可以使用下面代码绘制一个很多环中环的效果的view。
- View Code
- - (void)drawRect:(CGRect)rect
- {
- // What rectangle am I filling? CGRect bounds = [self bounds];
- // Where is its center? CGPoint center;
- center.x = bounds.origin.x + bounds.size.width / 2.0;
- center.y = bounds.origin.y + bounds.size.height / 2.0;
- // From the center how far out to a corner? float maxRadius = hypot(bounds.size.width, bounds.size.height) / 2.0;
- // Get the context being drawn upon CGContextRef context = UIGraphicsGetCurrentContext();
- // All lines will be drawn 10 points wide CGContextSetLineWidth(context, 10);
- // Set the stroke color to light gray [[UIColor lightGrayColor] setStroke];
- // Draw concentric circles from the outside in for (float currentRadius = maxRadius; currentRadius > 0;
- currentRadius -= 20) {
- CGContextAddArc(context, center.x, center.y,
- currentRadius, 0.0, M_PI * 2.0, YES);
- CGContextStrokePath(context);
- }
- }
这样view的效果如下图:
我们可以继续绘制一些东西,比如绘制文字,将下面代码添加带这个方法后面。
- // Create a string NSString *text = @"我是朱祁林,不是朱麒麟";
- // Get a font to draw it in UIFont *font = [UIFont boldSystemFontOfSize:28];
- // Where am I going to draw it? CGRect textRect;
- textRect.size = [text sizeWithFont:font];
- textRect.origin.x = center.x - textRect.size.width / 2.0;
- textRect.origin.y = center.y - textRect.size.height / 2.0;
- // Set the fill color of the current context to black [[UIColor blackColor] setFill];
- // Set the shadow to be offset 4 points right, 3 points down,
- // dark gray and with a blur radius of 2 points CGSize offset = CGSizeMake(4, 3);
- CGColorRef color = [[UIColor darkGrayColor] CGColor];
- CGContextSetShadowWithColor(context, offset, 2.0, color);
- // Draw the string [text drawInRect:textRect
- withFont:font];
效果:
如果view过大,我们可以把它放置到一个UIScrollView中间,这样就可以进行拖动了。UIScrollView与View的关系如下图:
使用下面代码创建一个比iPhone屏幕大4倍的View,然后通过UIScrollView来展示,代码如下:
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- //创建一个窗体大小的CGRect
- CGRect wholeWindow = [[self window] bounds];
- // 创建一个窗体大小的HypnosisView实例
- view = [[HypnosisView alloc] initWithFrame:wholeWindow];
- UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:wholeWindow];
- [[self window] addSubview:scrollView];
- // Make your view twice as large as the window CGRect reallyBigRect;
- reallyBigRect.origin = CGPointZero;
- reallyBigRect.size.width = wholeWindow.size.width * 2.0;
- reallyBigRect.size.height = wholeWindow.size.height * 2.0;
- [scrollView setContentSize:reallyBigRect.size];
- CGPoint offset;
- offset.x = wholeWindow.size.width * 0.5;
- offset.y = wholeWindow.size.height * 0.5;
- [scrollView setContentOffset:offset];
- // Create the view view = [[HypnosisView alloc] initWithFrame:reallyBigRect];
- [view setBackgroundColor:[UIColor clearColor]];
- [scrollView addSubview:view];
- [scrollView release];
- [[UIApplication sharedApplication] setStatusBarHidden:YES
- withAnimation:UIStatusBarAnimationFade];
- [[self window] makeKeyAndVisible];
- return YES;
- }
这样我们就可以拖动来展示看不到的view了,如下图:
通过UIScrollView我们还可以设置view的缩放功能,将下面代码添加到中。这样我们就可以使用两根手指缩放view了。
- // Enable zooming
- [scrollView setMinimumZoomScale:0.5];
- [scrollView setMaximumZoomScale:5];
- [scrollView setDelegate:self];
小结:详解iOS开发之自定义View的内容介绍完了,简单的总结了一下自定义view的使用,希望本文对你有所帮助!本文为了方便友们更好的去学IOS开发中的View,提供代码下载,地址为:http://files.cnblogs.com/zhuqil/Hypnosister.zip 。
详解iOS开发之自定义View的更多相关文章
- iOS开发之自定义表情键盘(组件封装与自动布局)
下面的东西是编写自定义的表情键盘,话不多说,开门见山吧!下面主要用到的知识有MVC, iOS开发中的自动布局,自定义组件的封装与使用,Block回调,CoreData的使用.有的小伙伴可能会问写一个自 ...
- 深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS
深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS ios中并不是所有的对象都支持copy,mutableCopy,遵守NSCopying 协议的类可以发送copy消息,遵守NSMutab ...
- 超全详解Java开发环境搭建
摘自:https://www.cnblogs.com/wangjiming/p/11278577.html 超全详解Java开发环境搭建 在项目产品开发中,开发环境搭建是软件开发的首要阶段,也是必 ...
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
在 IOS 开发当中经常碰到 whose view is not in the window hierarchy 的错误,该错误简单的说,是由于 "ViewController" ...
- 详解LUA开发工具及其环境配置
LUA开发工具及其环境配置是本文要介绍的内容,主要是来了解并学习lua开发工具的使用和环境的配置,第一次接触LUA的话,就跟本人一起学习吧.看我能不能忽悠到你. LUA是语言,那么一定有编写的工具.第 ...
- [转]javascript console 函数详解 js开发调试的利器
javascript console 函数详解 js开发调试的利器 分步阅读 Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该 ...
- Java-异常机制详解以及开发时异常设计的原则要求
Java-异常机制详解以及开发时异常设计的原则要求 http://blog.csdn.net/Jack__Frost/article/details/52760930?locationNum=6
- 详解WebService开发中四个常见问题(2)
详解WebService开发中四个常见问题(2) WebService开发中经常会碰到诸如WebService与方法重载.循环引用.数据被穿该等等问题.本文会给大家一些很好的解决方法. AD:WO ...
- 详解WebService开发中四个常见问题(1)
详解WebService开发中四个常见问题(1) WebService开发中经常会碰到诸如WebService与方法重载.循环引用.数据被穿该等等问题.本文会给大家一些很好的解决方法. AD:WO ...
随机推荐
- Linux各个发行版本的介绍, 以及VirtualBox+CentOS的安装步骤
Linux和Unix系统有哪些主要的发行版本 Unix: (非开源传统商业操作系统) IBM AIX, HP HP-UX, Sun Solaris,等 各家硬件厂商的发行版本, 往往是和自家的硬件设备 ...
- C++中的栈和队列
使用标准库的栈和队列时,先包含相关的头文件 #include<stack> #include<queue> 定义栈如下: stack<int> stk; 定义队列如 ...
- linux杂记(十四)CAJ文档阅读方法
关于Linux下看CAJ文档的方法 前言:由于大四狗要写各种各样的综述,看各种论文,关于知网为何没有PDF下载,关于为何知网没有CAJ阅读器for linux的种种蛋疼问题,都不要问我. 说回正题,网 ...
- QReadWriteLock上锁容忍的等待时间是多久?
非递归上锁情况下,同一个锁,已经被锁过一次,那么另外一个线程尝试上锁,会被挡在外面,但是会被挡多久呢?挡一分钟会被崩溃,还十分钟,还是永久等待而不崩溃(希望如此)?还是会立刻崩溃?因为不可以重复上锁. ...
- MyBatis使用DEMO及cache的使用心得
下面是一个简单的MyBatis使用DEMO. 整体结构 整体代码大致如下: POM依赖 需要引用两个jar包,一个是mybatis,另一个是mysql-connector-java,如果是maven工 ...
- mysql 性别存储
大家在设计数据库时,碰到 性别.状态等 这些 值比较固定的列时,数据类型 是如何定义? 通常都是采用 : 1 create table `XXX` 2 ( 3 ........ 4 sex int(1 ...
- Java知识点复习
总结下java的知识点 final 关键字-方法:不能被子类重写(override)-变量:不能被修改-类:不可以被继承,派生子类 finally 关键字与try/catch语句配合使用,即使有异常抛 ...
- android技术牛人的博客[转]
Android+JNI调用–文件操作 开发环境:Windows xp sp3 +MyEclipse 8.6+android2.3.3+jdk1.6+android-ndk-r6b JNI概述: ...
- hdu 2777(线段树)
这道题是看了别人的思路才做出来的. 刚看完这道题没什么思路,线段的长度是10^5,操作指令数是10^5,还要记录不同颜色种类数,觉着怎么写肯定都是要超时.我当时在节点里增加了一个数组记录已经出现的颜色 ...
- Node.js笔记4
4. 文件系统 fs fs模块是文件操作的封装,提供了同步跟异步操作2个版本 * fs.readFile(filename,[encoding],[callback(err,data)]) 是最简单的 ...