代码构建UI
1、视图树模型
计算机图形实际上是一个视图树模型,每个视图都有一个本地坐标系。
每个本地坐标系的组成部分是:原点在父坐标系中的位置,每个基在父坐标系中的位置,由此就可以根据向量的本地位置求出相对于父坐标系的位置,最终求出向量全局位置。
我们要分清全局坐标系,父坐标系,本地坐标系三种概念,分清基、向量的坐标、向量的位置三种概念。
2、控件监听事件
观察者模式在这里得到充分体现。
监听普通事件:
[button addTarget:self action:@selector(loadImageWithMultiThread) forControlEvents:UIControlEventTouchUpInside];
监听手势事件:
UITapGestureRecognizer响应顺序是怎么样的
一个scrollview上有几个按钮
在scrollview上add 了一个单击事件
singletap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[singletap setNumberOfTapsRequired:1];
[scrollview addGestureRecognizer:singletap];
这样点击按钮,不会响应按钮的事件,直接跳到handleSingleTap去了?
单击事件不是应该先被直接单击的subview处理,如果没有处理才提交到supview处理嘛?
怎么才能让按钮响应单击事件?
使用
UIGestureRecognizerDelegate的一个方法判断点击的是哪个view,确定是否响应事件。
singletap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[singletap setNumberOfTapsRequired:1];
singletap.delegate = self;
[scrollview addGestureRecognizer:singletap];
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if(touch.view != scrollview){
return NO;
}else
return YES;
}
自定义UI
[[UIScreen mainScreen] bounds] 和[UIScreen mainScreen] applicationFrame]
两者之间相差20
UIScreen也是UIView,它是操作系统传播坐标系原点绝对坐标和分度值绝对长度的起点,系统给出应用的屏幕相对于硬件屏幕坐标系的原点绝对坐标,以及应用屏幕的本地坐标系分度值相对于硬件的绝对长度。
[[[UIApplication sharedApplication] keyWindow] addSubview:myNewView];
怎样让视图显示在最外层?这样就把视图显示在最外层
尝尝使用这个方法覆盖一个HUD风格的透明图形
becomeKeyWindow 和 – resignKeyWindow ,线程调用这两个方法,控制一个window实例是否成为用于转发用户消息的那个窗口
Interface Builder
笔者倾向于使用纯代码方式来实现界面布局,这样更容易实现自定义UI控件和更容易维护修改。不过对于简单的界面,也可以使用苹果为我们提供的图形化的方式来构建。
1、如果通过加载nib文件的方式加载controller的视图,那么程线程调用 initWithNibName: 来初始化controller.view。线程会根据nib文件实例化一个NSCoder实例,然后调用initWithCoder初始化控制器所控制的视图界面。所以程序员需要实现initWithCoder方法而不是init。
- (id)initWithCoder:(NSCoder*)coder{ if (self =[super initWithcoder:coder]) { //初始化控制器的变量 } return self; }
2、使用interface builder实现控件监听事件,需要配合代码中的IBOutlet和IBAction关键字,并建立Interface Builder对象和代码的关联。
图片资源
要建立一个像那么回事儿的界面,不能不关注图片资源,虽然这看起来像是美工的活。
1、分辨率