下面这些都是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二的更多相关文章

  1. UIKit 框架之UIView一

    - (id)initWithFrame:(CGRect)aRect //通过一个矩形对象初始化 Configuring a View’s Visual Appearance //配置视觉展示 @pro ...

  2. UIKit 框架之UITableView二

    // // ViewController.m // UITableView // // Created by City--Online on 15/5/21. // Copyright (c) 201 ...

  3. UIKit框架使用总结--看看你掌握了多少

    一.经常使用的,基本就是每次项目迭代都需要使用的 UIView.UILabel.UIImage.UIColor.UIFont.UIImageView.UITextField.UIButton. UIS ...

  4. UIKit框架

    在今后的应用程序构建中,会陆续使用各式各样的控件,因此UIKit框架的引入是必不可少的! 一.简介 UIKitk框架提供一系列的Class(类)来建立和管理iPhone OS应用程序的用户界面接口.应 ...

  5. iOS学习32之UIKit框架-可视化编程-XIB

    1. Interface Builder 可视化编程 1> 概述 GUI : 图形用户界面(Graphical User Interface, 简称GUI, 又称图形化界面) 是指采用图形方式显 ...

  6. iOS开发概述UIkit动力学,讲述UIKit的Dynamic特性,UIkit动力学是UIkit框架中模拟真实世界的一些特性。

    转发:http://my.oschina.net/u/1378445/blog/335014 iOS UIKit动力学 Dynamics UIAttachmentBehavior 实现iMessage ...

  7. iOS开发UIKit框架-可视化编程-XIB

    1. Interface Builder 可视化编程 1> 概述 GUI : 图形用户界面(Graphical User Interface, 简称GUI, 又称图形化界面) 是指采用图形方式显 ...

  8. 79、iOS 的Cocoa框架、Foundation框架以及UIKit框架

    Cocoa框架是iOS应用程序的基础 1. Cocoa是什么? Cocoa是 OS X和ios 操作系统的程序的运行环境. 是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发 ...

  9. UIKit 框架之Bar、Controller

    UIKit框架中有各种Bar,UITabBar.UINavigationBar.UIToolbar.Bar对应的就有一些Item,tabBarItem.navigationItem.toolbarIt ...

随机推荐

  1. Spring 使用javaconfig配置

    除了使用xml,spring提供javaconfig配置,下面是简单的例子: 1.声明接口 /** * */ package com.junge.demo.spring.service; /** * ...

  2. .net图表之ECharts随笔03-热力地图

    基于01和02 要得到如图所示的热力地图(我从NuGet上下载的包没有heatmap.js文件,没法直接搞热力图,只好暂时先搞着地图.后面尽量搞一下),一般要设置四个参数——title.tooltip ...

  3. MVC 视图不使用模板页的两种方法

    直接对view页面的Layout值设置null @{ Layout = null;//"~/Views/Shared/_Layout.cshtml"; } 对_ViewStart. ...

  4. 【HDU5730】 Shell Necklace

    HDU5730 Shell Necklace 题目大意 已知连续i(1<=i<=n)个贝壳组合成一段项链的方案数a[i],求组合成包含n个贝壳的项链的总方案数. Solution cdq分 ...

  5. Java Calender 类详解

    一.   如何创建 Calendar 对象 Calendar 是一个抽象类, 无法通过直接实例化得到对象. 因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar ...

  6. Codeforces gym101612 L.Little Difference(枚举+二分)

    传送:http://codeforces.com/gym/101612 题意:给定一个数n(<=1e18),将n分解为若干个数的成绩.要求这些数两两之间的差值不能大于1. 分析: 若n==2^k ...

  7. 代码审计| HDWiki 漏洞(一)

    i春秋核心白帽:yanzm 0×00 背景 最近拿到一个源码素材于是对这个源码进行分析发现了不少漏洞本篇先将一些漏洞进行分析下一篇再进行GetShell方法的分析期待和师傅们的交流. 0×01 漏洞分 ...

  8. cisco 的ACL

    搞网络好几年了,怎么说呢,水平一直停留在NA-NP之间,系统的学完NA后,做了不少实验,后来也维护了企业的网络,各种网络设备都玩过(在商汤用的Juniper srx 550 我认为在企业环境,非IDC ...

  9. Linux 下创建 sftp 用户并限定目录

    Linux 下创建 sftp 用户并限定目录 1.创建 sftpUser 用户组 [root@XXX ~]# groupadd sftpUser 2.创建 sftpUser 用户并指定目录 [root ...

  10. 记录jquery的ajax

    1.直接干货 ajax很简单jquery有很好的支持,原生js就不写了.总的说常用的有3个方法 $.post $.get $.ajax 具体参数参考教程http://www.runoob.com/jq ...