UIKit 框架之UIView二
下面这些都是UIView一些基本的东西,具体的可以参考UIKit 框架之UIView一博客
一、自定义一个View
//
// MyView.m
// UIView
//
// Created by cyw on 15-5-17.
// Copyright (c) 2015年 cyw. All rights reserved.
//
#import "MyView.h"
@implementation MyView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
//下面两个方法主要作用是事件传递、响应者链
//当在一个view上添加一个屏蔽罩,但又不影响对下面view的操作,也就是可以透过屏蔽罩对下面的view进行操作
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *hitView = [super hitTest:point withEvent:event];
if (hitView == self)
{
return nil;
}
else
{
return hitView;
}
}
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
return NO;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// UITouch *touch=[touches anyObject];
NSLog(@"bbbbb");
return;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
二、
//
// ViewController.m
// UIView
//
// Created by cyw on 15-5-17.
// Copyright (c) 2015年 cyw. All rights reserved.
//
#import "ViewController.h"
#import "MyView.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *view1=[[UIView alloc]init];
view1.frame=CGRectMake(100, 100, 200, 200);
//允许用户交互
view1.userInteractionEnabled=YES;
//tag值
view1.tag=10001;
//layer
view1.layer.backgroundColor=[UIColor redColor].CGColor;
//UIViewGeometry
//bounds center
NSLog(@"bounds=%@\ncenter=%@",NSStringFromCGRect(view1.bounds),NSStringFromCGPoint( view1.center));
//设置view是否响应多点触摸,默认为NO
view1.multipleTouchEnabled=YES;
////设置touch是否排它,默认为NO
view1.exclusiveTouch=YES;
//是否隐藏
view1.hidden=NO;
//将像素point从view中转换到当前视图中,返回在当前视图中的像素值
CGPoint point=[view1 convertPoint:CGPointMake(200, 200) fromView:self.view];
NSLog(@"convertPoint fromView=%@",NSStringFromCGPoint(point));
// 将像素point由point所在视图转换到目标视图view中,返回在目标视图view中的像素值
CGPoint point1=[view1 convertPoint:CGPointMake(200, 200) toView:self.view];
NSLog(@"convertPoint toView=%@",NSStringFromCGPoint(point1));
// 将rect从view中转换到当前视图中,返回在当前视图中的rect
CGRect rect=CGRectMake(50, 50, 200, 200);
CGRect rect1= [view1 convertRect:rect fromView:self.view];
//将rect由rect所在视图转换到目标视图view中,返回在目标视图view中的rect
CGRect rect2=[view1 convertRect:rect toView:self.view];
NSLog(@"convertRect fromView=%@",NSStringFromCGRect(rect1));
NSLog(@"convertRect toView=%@",NSStringFromCGRect(rect2));
//子视图自适应 如果设置成NO,那么subView的autoresizingMask属性失效。
view1.autoresizesSubviews=YES;
// typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
// UIViewAutoresizingNone = 0, 不调整
// UIViewAutoresizingFlexibleLeftMargin = 1 << 0,自动调整与superView左边的距离,也就是说,与superView右边的距离不变。
// UIViewAutoresizingFlexibleWidth = 1 << 1,自动调整与superView的右边距离,也就是说,与superView左边的距离不变。
// UIViewAutoresizingFlexibleRightMargin = 1 << 2,
// UIViewAutoresizingFlexibleTopMargin = 1 << 3,
// UIViewAutoresizingFlexibleHeight = 1 << 4,
// UIViewAutoresizingFlexibleBottomMargin = 1 << 5
// };
//多个用|
view1.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin;
//调整view的尺寸去适应其内容
[view1 sizeToFit];
//传递view的尺寸,返回建议的子view尺寸
CGSize size=[view1 sizeThatFits:CGSizeMake(100, 150)];
NSLog(@"sizeThatFits=%@",NSStringFromCGSize(size));
//UIViewHierarchy
//UIViewRendering
//子视图超出边境裁剪
view1.clipsToBounds=YES;
//透明度
view1.alpha=0.5;
// opaque属性提示绘制系统如何处理view。如果opaque设置为YES,绘图系统会将
// view看为完全不透明,这样绘图系统就可以优化一些绘制操作以提升性能。如果设置
// 为NO,那么绘图系统结合其它内容来处理view。默认情况下,这个属性是YES。)
// 如果屏幕是静止的,那么这个opaque属性的设置与否不是一个大问题。但是,如果
// view是嵌入到scroll view中的,或者是复杂动画的一部分,不将设置这个属性的话
// 肯定会影响程序的性能!
// alpha支持animation, hidden和opaque不支持
// hidden开销小,alpha=0透明开销大,如果效果一样,用hidden好一点.
// hideen的时候view是不接收事件的,但alpha为0接收
// 当把View设置为透明的背景时,一般把opaque设置为NO,可以减少开销,对内存也好.
// 告诉系统渲染器view是否不透明,设置YES可以加快渲染,默认为YES,如果设置了alpha值,应该设置为NO
view1.opaque=YES;
// 是否清除缓冲区中不可见内容,默认为YES,如果在一个滚动操作频繁的视图中,应该设为NO,以避免重新渲染,提升性能
view1.clearsContextBeforeDrawing=YES;
//view自适应变化的方式 填充方式 左对齐、右对齐、拉伸填充等
view1.contentMode=UIViewContentModeScaleToFill;
MyView *myView=[[MyView alloc]initWithFrame:view1.frame];
myView.backgroundColor=[UIColor blackColor];
[self.view addSubview:view1];
//将自定义的MyView 放在View上面时,点击触发响应者链
[self.view addSubview:myView];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// UITouch *touch=[touches anyObject];
NSLog(@"aaaaa");
return;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
三、点击视图
2015-05-17 18:20:17.356 UIView[676:60b] bounds={{0, 0}, {200, 200}}
center={200, 200}
2015-05-17 18:20:17.358 UIView[676:60b] convertPoint fromView={100, 100}
2015-05-17 18:20:17.358 UIView[676:60b] convertPoint toView={300, 300}
2015-05-17 18:20:17.359 UIView[676:60b] convertRect fromView={{-50, -50}, {200, 200}}
2015-05-17 18:20:17.360 UIView[676:60b] convertRect toView={{150, 150}, {200, 200}}
2015-05-17 18:20:17.360 UIView[676:60b] sizeThatFits={200, 200}
2015-05-17 18:20:20.049 UIView[676:60b] aaaaa
四、上面输出可以看到输出"aaaaa"而不是"bbbb", 因为在MyView中重写了-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event屏蔽了最上面按钮的响应,而它下面的可以响应
UIKit 框架之UIView二的更多相关文章
- UIKit 框架之UIView一
- (id)initWithFrame:(CGRect)aRect //通过一个矩形对象初始化 Configuring a View’s Visual Appearance //配置视觉展示 @pro ...
- UIKit 框架之UITableView二
// // ViewController.m // UITableView // // Created by City--Online on 15/5/21. // Copyright (c) 201 ...
- UIKit框架使用总结--看看你掌握了多少
一.经常使用的,基本就是每次项目迭代都需要使用的 UIView.UILabel.UIImage.UIColor.UIFont.UIImageView.UITextField.UIButton. UIS ...
- UIKit框架
在今后的应用程序构建中,会陆续使用各式各样的控件,因此UIKit框架的引入是必不可少的! 一.简介 UIKitk框架提供一系列的Class(类)来建立和管理iPhone OS应用程序的用户界面接口.应 ...
- iOS学习32之UIKit框架-可视化编程-XIB
1. Interface Builder 可视化编程 1> 概述 GUI : 图形用户界面(Graphical User Interface, 简称GUI, 又称图形化界面) 是指采用图形方式显 ...
- iOS开发概述UIkit动力学,讲述UIKit的Dynamic特性,UIkit动力学是UIkit框架中模拟真实世界的一些特性。
转发:http://my.oschina.net/u/1378445/blog/335014 iOS UIKit动力学 Dynamics UIAttachmentBehavior 实现iMessage ...
- iOS开发UIKit框架-可视化编程-XIB
1. Interface Builder 可视化编程 1> 概述 GUI : 图形用户界面(Graphical User Interface, 简称GUI, 又称图形化界面) 是指采用图形方式显 ...
- 79、iOS 的Cocoa框架、Foundation框架以及UIKit框架
Cocoa框架是iOS应用程序的基础 1. Cocoa是什么? Cocoa是 OS X和ios 操作系统的程序的运行环境. 是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发 ...
- UIKit 框架之Bar、Controller
UIKit框架中有各种Bar,UITabBar.UINavigationBar.UIToolbar.Bar对应的就有一些Item,tabBarItem.navigationItem.toolbarIt ...
随机推荐
- 前端开发 - jQuery
本节内容 一.jQuery概述 二.选择器 三.操作DOM 四.修改DOM结构 五.事件 六.动画 七.AJAX(待续) 八.扩展(待续) 一.jQuery概述 jQuery 是一个 JavaScri ...
- Python自动化开发 - 网络编程
本节内容 1.客户端/服务器架构 2.OSI七层 3.socket层 4.socket是什么 5.套接字发展史及分类 6.套接字工作流程 一.客户端/服务器架构 即Client/Server架构,包括 ...
- HyperServer 中的 SSL 支持
HyperServer 中的 SSL 支持 DLL 模式不需要 SSL 配置, 因为 web 服务器 (如 IIS) 将承担 ssl 配置和 ssl 证书的责任. 对于独立和服务模式, ssl 配置是 ...
- MVC所有的ActionResult
一.所有的Controller都继承自System.Web.Mvc.Controller 目前ASP.NET MVC3默认提供了多种ActionResult的实现,在System.Web.Mvc命名空 ...
- CentOS 7 - 安装Oracle JDK8
我们要在CentOS安装最新版本的JDK8,需要首先将JDK下载到服务器,然后通过操作系统自带的工具yum进行安装. 本文我们将介绍CentOS 7下JDK8的安装. 从官网下载页面找到JDK8的下载 ...
- 【SPOJ10707】 COT2 Count on a tree II
SPOJ10707 COT2 Count on a tree II Solution 我会强制在线版本! Solution戳这里 代码实现 #include<stdio.h> #inclu ...
- maven项目无法新增java test目录的问题
有时候当我们构建好maven项目时,再导入eclipse中会缺少src/main/java 和src/test/java,这是需要我们手动创建: 但是有时候在 项目视图下或者 enterprise ...
- java项目配置域名(tomcat直接配置 or 使用nginx反向代理)
一: tomcat直接配置域名:https://blog.csdn.net/qq_36330228/article/details/78516160 二: 使用nginx进行反向代理 tomcat服 ...
- SpringBoot从入门到逆天(1)
1.SpringBoot是什么? <1>为Sping开发提供一个更 快捷更广泛的入门体验. <2>开箱即用,不合适时特可以快速抛弃. <3>提供一系列大型项目常用的 ...
- 剑指offer十七之树的子结构
一.题目 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 二.思路 1.首先设置标志位result = false,因为一旦匹配成功result就设为tru ...