UI基础知识汇总(part 1)
概念部分
代理 / 委托设计模式
代理设计模式的场合:
- 当对象A发生了一些行为, 想告知对象B.(让对象B成为对象A的代理对象)
- 当对象B想监听对象A的一些行为.(让对象B成为对象A的代理对象)
- 当对象A无法处理某些事情的时候, 让对象B帮它处理.(让对象B成为对象A的代理对象)
- 对象间的传值
请代理的步骤:
- 写一个协议, 把自己不方便(或自己不想)做的事情列出来(@protocol 类名+Delegate <NSObject>)
- 包含进来一个遵守协议的对象, 对象可以试任意类型(id<类名+Delegate> delegate)
- 自己发生一些事情想通知代理去做, 就调用代理对应的方法 ( [self.delegate 代理方法: self] )
成为代理的步骤:
- 遵守协议(<类名+Delegate>)
- 实现协议里面对应的方法(即代理方法)
- (这一点经常容易忘, 着重强调!!)设置代理的对象, 给代理对象赋值, 建立起两者之间的代理关系
使用代理的注意点:
- 协议的命名规则: 类名+Delegate
- 一般协议里的方法都写成: @optional
- 协议里方法的命名: *小写类名开头+描述这个方法在什么时间或者发生什么事情调用, 第一个参数一般是类自身的对象 (例如: -(void)studentDidReceiveDelivery:(Student )stu;)
代理设计模式的核心作用就是为了解耦, 解除对象之间的紧耦合性!
代码部分
UIScrollView
-
设置UIScrollView当前要滚动的范围大小
CGSize size = self.imageViewIcon.image.size; self.scrollView.contentSize = size;
-
设置滚动后内容的内边距
self.scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);
-
设置初始滚动位置
self.scrollView.contentOffset = CGPointMake(0, -64);
-
设置offset偏移量进行滚动(带动画, 可累加)
CGPoint offset = self.scrollView.contentOffset; offset.x += 100; offset.y += 100; [self.scrollView setContentOffset:offset animated:YES];
-
获取某个控件的最大Y值
CGFloat btnMaxY = CGRectGetMaxY(self.lastButton.frame);
-
启动定时器
self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
-
获取主线程消息循环, 将定时器加入进去, 更改运行模式,使其能够同时处理两个或以上UI事件(默认NSDefaultRunLoopMode运行模式只能同时处理一个UI事件)
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
-
关闭定时器
// 让当前定时器销毁 [self.timer invalidate]; // 清空self.timer self.timer = nil;
UIScrollView的代理方法
-
(别忘了!先要遵守协议<UIScrollViewDelegate>)让控制器成为scrollView的代理
self.scrollView.delegate = self;
-
此方法是告诉scrollView它的哪个子控件需要进行缩放
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.iconImageView; }
-
scrollView即将开始拖拽的时候调用的方法
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { }
-
scrollView正在滚动时调用的方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView { }
-
scrollView停止拖拽的时候调用的方法
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { }