UIView Programming Guide学习笔记

View

Creating and Configuring View Objects

Creating View Objects Using Interface Builder

  用Interface Builder就是大家熟知的用StoryBoard进行页面的创建,这里就不多讲了。主要是用StoryBoard进行UI的实现还是用Programatic的方法好呢,需要以后的继续研究。

Creating View Objects Programmatically

  默认的View的初始化函数是initWithFrame:  ,它将设备View相对于Superview的坐标和大小,如下:

CGRect  viewRect = CGRectMake(0, 0, 100, 100);
UIView* myView = [[UIView alloc] initWithFrame:viewRect];

这样就创建了一个有坐标和大小的View.

Setting the Properties of a View

UIView提供了很多属性提供给使用者使用,可以通过修改这些属性达到想要的效果。

这些属性不一定都会用,但是要了解,至少知道有个这样的东西存在,这样就方便以后使用了。

Tagging Views for Future Identification

UIView有一个tag属性,通过这个属性,我们就可以用UIView的viewWithTag:  获取所对应的View。注意这个函数是通过深度优先去遍历的

Creating and Managing a View Hierarchy

  这一部分主要是就介绍了View Hierarchy的创建和管理,也就是对View这个对象进行管理。

Adding and Removing Subviews

  1. 通过以下函数可以对Subviews进行添加、删除、重排序
  • addSubview:
  • insertSubview:
  • 重排序:
    • bringSubviewToFront:
    • sendSubviewToBack:
    • exchangeSubviewAtIndex:withSubviewAtIndex
  • removeFromSuperview:  

  2.当Subview超出Superview的bonds的范围时,在默认的情况先,多出的部分会被显示,如果想让多的部分被切掉可以设置View的ClipsToBonds = YES。

  3.addSubview在下面两个地方使用比较普遍

  • 在application:didFinishLaunchingWithOptions:  中
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // Add the view controller‘s view to the window and display.
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
return YES; }
  • 在loadView或者viewDidLoad函数中,对View hierarchy进行管理

    • loadView---------building your View programmatically
    • viewDidLoad-----creat view programmatically or load them from NIB

Hiding Views

  1.可以用如下方法hide a view

  •   hidden = YES
  •   alpha = 0.0

  2.在View被隐藏后,它将不会显示。但是会参与到界面的auto-layout过程中。所以当一个界面现在小时等会又要出现的情况下,hidden比remove 一个View要更有效率

  3.关于hidden view的responds to Events

  当一个View被隐藏,它将无法Respond to the events!

  但是!如果这个将要本隐藏的View是现在的First Responder,那么在他隐藏的时候,不会将Fisrt Responder这个状态注销掉,所以需要强制的改变这个状态才行。

  4.关于hidden的动画

  很多人需要View在hidden时加入动画,这里要注意的是,用hidden属性的话将不会现实动画,只有用alpha属性进行hidden才可以加入想要的动画。

Locating Views in a View Hierarchy

有两种方式可以在View Hierarchy中得到想要的View

  • 将View的指针引用保存下来,下次直接使用
  • 通过View的tag属性,用viewWithTag:来Get这个View

Translating, Scaling, and Rotating Views

这里主要讲的是View的变化,比如放大缩小,旋转等该怎么实现

  1、UIView的transform属性包含了一个CGAffineTransform 的结构,在默认的情况下这个属性是不会对View产生任何影响,

    但我们可以在任何时候对这个transform属性进行赋值操作,使View的状态发生改变。

  比如,让View旋转45度:

// M_PI/4.0 is one quarter of a half circle, or 45 degrees.
CGAffineTransform xform = CGAffineTransformMakeRotation(M_PI/4.0);
self.view.transform = xform;

  2、transform的操作都是以View的center ponit为原点进行操作的

  3、scaling a view只是改变图片的长宽,而不改变其center point

Converting Coordinates in the View Hierarchy

这里主要将的是 在ViewHierarchy中各View之间的其不同坐标参照系下的坐标转换。

  1、对于UIView我们可以用下面两组函数进行转换

  • convertPoint:fromView: / convertPoint:toView:
  • convertRect:fromView: / convertRect:toView:

下图将会对这个转换过程和结果进行很好的诠释:

这里的蓝色和粉色虚线框代表两个不同的View(蓝色的为A View、粉色的为B View),我们将需要转化的矩形称作M矩形

此时可以看到,M矩形在A View中的位置是蓝色实线的矩形,而通过转换M矩形在B View中变成了粉色实线的矩形。相当于一个投影,他们有自己独立的参照系。

持续更新中。。。。

原创文章,转载请标明出处,谢谢!

时间: 2024-11-05 18:51:52

UIView Programming Guide学习笔记的相关文章

Object-C runtime programming guide学习笔记

Messaging 向一个实例发消息,runtime使用的是objc_msgSend函数来发送的. 每一个class都有一个指针指向他的super class,有一个 dispatch table,指向每个方法的地址. 每一个实例(来自NSObject or NSProxy)都有一个指针isa,指向他的class. runtime通过向上回溯直到找到调用的方法,然后执行. 执行的方法中会传入两个隐藏参数 self:  message receiver _cmd: 当前方法的selector 动态

iOS UIView动画效果 学习笔记

CGRect frame = _confirmV.frame; [UIView beginAnimations:nil context:nil];//动画定义开始 [UIView setAnimationDuration:0.5];//动画的时长 [UIView setAnimationDelay:0]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(removeConfirmV

The C++ Programming Language 学习笔记 第5章 指针、数组和结构

1.关于输出指向字符的指针的值. 现在定义,char c='a',char* pc=&c.在C中,输出该值只需要printf("%p\n",pc);而在C++中,如果cout<<pc<<endl;则会出现奇怪的一串字符,怎么回事呢.由于C++标准库中I/)类对<<操作符重载,因此在遇到字符型指针时会将其当作字符串名来处理,输出指针所指的字符串.所以我们可以将其先转化为void*,再输出. cout << static_cast&l

The C++ Programming Language 学习笔记 第6章 表达式和语句

1.关于strcpy函数. 书中说c风格的字符串尽量少用,strcpy这样的函数应该也要少用.这里讲这个函数主要是要通过本章课后练习第十题来讲一下前面提及的要点.巩固一下前几章的知识.写了一段,本来感觉自己写得不错了,结果和网上的一笔感觉还是差很多,也学到了很多,下面贴上网址供大家看看.http://blog.csdn.net/cazicaquw/article/details/7044602. 里面讲得很详细,很多细节对于我们初学者来说也是很有用的.但感觉他写得太繁琐了,其实从指针到bool的

The C++ Programming Language 学习笔记 第7章 函数

1.关于内联函数(inline)      借用一下书中的例子. 1 inline int fac(int n) 2 { 3 return (n<2) ? 1:n*fac(n-1); 4 }      inline描述符给编译器一个提示,要求它试着把所有对fac()的调用在线化,也就是假如一个编译器够聪明的话,它会把对fac(6)生成常数720,然后直接代替代码中fac(6)的位置.不过这要视函数的复杂程度而言,假如递归复杂,或是有大量循环,或者代码复杂,或者并不依赖输入的内联函数(这个不知道为

The C++ Programming Language 学习笔记 第四章 类型和声明

1.关于main 函数中的 return 0 C99标准中,main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统).如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; ,表示程序正常退出.尽管如此有人会为了移植性在main函数后面加上return 0,这是为了照顾老版本的编译器,如vc6.0等,不过现在过了这么多年了,应该没有人会用这么老的编译器了吧(也许不一定),所以

3D Game Programming withDX11 学习笔记(一) 数学知识总结

在图形学中,数学是不可或缺的一部分,所以本书最开始的部分就是数学知识的复习.在图形学中,最常用的是矢量和矩阵,所以我根据前面三个章节的数学知识,总结一下数学知识. 一.矢量 数学中的矢量,拥有方向和长度.其实矢量和点在坐标系中的表示完全一致(笛卡尔坐标系为准),区分矢量和点的关键,我觉得就是做平移.点是不能用平移操作来保证一致的,比如点A(1,2,3)经过平移矢量(1,2,3)后就是B(2,4,6),此时就是一个新的点.但是矢量经过相同平移操作后,还是矢量(1,2,3),这是因为矢量表示的是 v

Advanced Bash-Scripting Guide(学习笔记)

http://www.tldp.org/LDP/abs/html/index.html       11.1. Loops tp://www.tldp.org/LDP/abs/html/loops1.html   for a do echo -n "$a " done   for 没有in ,直接操作[email protected]命令行参数

GraphX学习笔记——Programming Guide

学习的资料是官网的Programming Guide https://spark.apache.org/docs/latest/graphx-programming-guide.html 首先是GraphX的简介 GraphX是Spark中专门负责图和图并行计算的组件. GraphX通过引入了图形概念来继承了Spark RDD:一个连接节点和边的有向图 为了支持图计算,GraphX引入了一些算子: subgraph, joinVertices, and aggregateMessages等 和