(十一)延时执行、圆角(可实现圆形label)、代理设计模式
来源:互联网 发布:如何评价林彪 知乎 编辑:程序博客网 时间:2024/05/16 07:25
延时执行:
使用控件的performSelector...方法,例如用于移除,可以写在一行。
[lab performSelector:@selector(removeFromSuperview) withObject:lab afterDelay:4.0];
圆角的实现:
在iOS6中,只需要设定label.layer.cornerRadius即可实现圆角。
但是iOS7+中,需要将label.layer.masksToBounds设定为YES才行。
这牵扯到图层的概念。
在label内部有多个图层(对象),使用layer拿到的是主层,主层一般是用来容纳其他层。设置完主层的圆角后,子层盖在上面,会把主层的圆角盖住,因此要设置masksToBounds = YES,表示子层全部要遵循主层的边界。
还有一种方法是直接操作控件的clipsToBounds属性,表示剪掉超出边界的部分。
做法一:
lab.layer.masksToBounds = YES;lab.layer.cornerRadius = 10;做法二:
lab.clipsToBounds = YES;lab.layer.cornerRadius = 10;技巧:实现圆形label,尺寸为2R*2R,圆角为R即可。
如果要求在底层的View上面实现一个提示框(label),用父子关系来获取是很危险的,因为可能会改变视图的父子关系。因此使用self.superView直接拿到控制器是不稳定的。
方法一:给子View的控制器增加一个成员变量,用来存储底层View的控制器。这个方法的缺点在于会增加代码的耦合性(子View与底层控制器有粘连,不好移植)。
设计原则:一个独立的自定义View不能跟控制器有联系,为了能被多个控制器使用。
方法二:在子View的.h中暴露按钮,在底层View的控制器内给按钮addTarget,使得可以调用底层View的方法。由于暴露了内部内容,那么底层View与子View还是耦合的,去掉了子View后底层View就会受到牵连。
Tip:tag可以用来传递信息。
方法三:用代理处理
因为显示label要在底层View控制器,因此应该在子View中调用,但是在底层View的控制器中执行,因此要将底层View的方法委托出去,让控制器监听触发label显示的按钮(在子View中)。
过程总结:子View点击按钮->通知底层View控制器->执行控制器的label显示代码。
第一步,在子View中定义protocol:
@class AppData, AppView;@protocol AppViewDelegate <NSObject>@optional- (void)appViewClickedDownloadBtn:(AppView *)appView;@endprotocol中的方法一般声明为@option,表示不一定要实现。
第二步,在子View中定义delegate成员变量(定义在.h中确保可以设定):
@property (weak, nonatomic) id<AppViewDelegate> deleage;
第三步,在点击按钮时调用方法通知代理:
注意先用respondsToSelector来判断是否有此方法(@option造成可能没有实现这个方法)
if ([self.deleage respondsToSelector:@selector(appViewClickedDownloadBtn:)]) { [self.deleage appViewClickedDownloadBtn:self];}第四步,底层控制器遵循protocol,并且实现相应的方法。
@interface ViewController () <AppViewDelegate>控制器作为代理:
appView.deleage = self;实现方法:
- (void)appViewClickedDownloadBtn:(AppView *)appView{ NSLog(@"Click");}
- (十一)延时执行、圆角(可实现圆形label)、代理设计模式
- 设计模式(十一)proxy代理模式
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)之Proxy - 代理模式
- 模式十一(代理模式)
- 设计模式---代理模式(c++实现)
- 设计模式-java实现代理模式(静态代理)
- 设计模式十一(桥接模式,python 语言实现)
- 设计模式实现(二十一)---中介者模式(Mediator)
- 我与C++设计模式(十一)——代理模式
- C++设计模式[十一]代理模式
- Java设计模式(十一)
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- uva253Cube painting骰子涂色
- Unity弹痕制作
- 获取Android地理位置的方法
- POJ 3159 Candies(spfa最短路,差分约束)
- (十一)延时执行、圆角(可实现圆形label)、代理设计模式
- uboot中 Tiny 4412和smdk 4212的一些不同
- 原理图与PCB设计基础
- unity3d引用android第三方sdk
- hdu4340 树形dp
- 移动UI设计中的7种主要导航模式
- pring MVC常用的注解
- HDU 4454 Stealing a Cake(三分暴力枚举)
- 给字符指针赋值, ” “双引号与' '单引号的区别