IOS“吐司”和 代理的设计模式
2015-09-15 12:10
351 查看
类似安卓的吐司:(包含动画、圆角,UILabel)
UILabel *label = [[UILabel alloc] init];
label.text = [NSString stringWithFormat:@"成功下载%@", self.app.name];
label.font = [UIFont systemFontSize:12];
label.textAlignment = NSTextAlignmentCenter;//内容居中
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor blackColor];
label.frame = CGRectMake(0, 0, 125, 25);//前面两个参数可以随便写,因为用center属性可以更快改变空间的中心坐标
label.center = CGPointMake(160, 240);//此时label由于它自身的中心位置坐标发生了改变,所以上面一行代码中的0,0坐标就改变了
label.alpha = 0.0;//这里讲透明度设置为完全透明,是为了让它在之后渐渐显示出来。
[self.superview addSubview:label];//self.superview的意思是调用父View,由于本类是一个UIView,并且在控制器A中实现了它,所以这里的
self.superview 代表的就是控制器A中的UIView
//设置圆角
label.layer.cornerRadius = 10; //本行代码在IOS6中就可以给label设置圆角,但是在IOS7中不行,还需要再加上下面一行代码
label.layer.masksToBounds = YES;//默认是NO,超出主层边界的内容统统剪掉
//上面一行代码和下面一行代码等价,效果一样
//label.clipsToBounds = YES;
//动画
[UIView animateWithDuration:1.0 animations:^{
label.alpha = 0.5;
} completion:^(BOOL finished){
[UIView animateWithDuration:1.0 delay:1.0 options:UIViewAnimationOptionCurveLinear animations:^{
label.alpha = 0.0;
} completion:^(BOOL finished){
[label removeFromSuperview];//将label从控制器中移除【也从内存中释放了】
}
}
代理设计模式:
添加label到控制器的view这段代码 : 在控制器里面执行
点击下载按钮的时候,应该通知控制器,控制器得知点击了下载按钮,就执行【添加label到控制器的view】这段代码
简单理解就是:当下载按钮被点击的时候,要告诉控制器下载按钮被点了,这时让控制器去做相应的操作。
简单说就是:控制器应该监听 下载按钮的点击
B类要监听A类中的东东,所以B需要成为A类的代理,所以A类需要在自己的类中声明代理
A类.h文件中
@class AppView;
//声明一个协议
@optional
@protocol AppViewDelegate<NSObject>//协议命名规范:以类名开头
- (void)appViewClickedDownloadButton:(AppView *)appView;
@end
@interface AppView : UIView
@property (nonatomic, weak) id<AppViewDelegate> delegate;
@end
A类.m文件中
在需要监听的地方添加代码,例如在按钮的点击事件中写,就相当于B类监听了A类的按钮点击事件
- (IBAction)download:(UIButton *)btn{
//判断某个对象有appViewClickedDownloadButton:方法
//通知代理
if([self.delegate respondsToSelector:@selector(appViewClickedDownloadButton:)])
{
[self.delegate appViewClickedDownloadButton:self];
}
}
在B类中实现A类的协议,成为A类的代理
B类的.m文件
@interface B类 ()<AppViewDelegate>//遵守协议
- (void)test
{
AppView *appView = [[AppView alloc] init];
appView.delegate = self;
}
//下面的方法 当点击了 下载按钮的时候就会调用,因为在下载按钮中通知了本类,因为本类成为了A类的代理
//实现代理的方法【这样,当A类发生什么事情之后,就会通知B类去执行这里实现的代理方法】
- (void)appViewClickedDownloadButton:(AppView *)appView
{
}
UILabel *label = [[UILabel alloc] init];
label.text = [NSString stringWithFormat:@"成功下载%@", self.app.name];
label.font = [UIFont systemFontSize:12];
label.textAlignment = NSTextAlignmentCenter;//内容居中
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor blackColor];
label.frame = CGRectMake(0, 0, 125, 25);//前面两个参数可以随便写,因为用center属性可以更快改变空间的中心坐标
label.center = CGPointMake(160, 240);//此时label由于它自身的中心位置坐标发生了改变,所以上面一行代码中的0,0坐标就改变了
label.alpha = 0.0;//这里讲透明度设置为完全透明,是为了让它在之后渐渐显示出来。
[self.superview addSubview:label];//self.superview的意思是调用父View,由于本类是一个UIView,并且在控制器A中实现了它,所以这里的
self.superview 代表的就是控制器A中的UIView
//设置圆角
label.layer.cornerRadius = 10; //本行代码在IOS6中就可以给label设置圆角,但是在IOS7中不行,还需要再加上下面一行代码
label.layer.masksToBounds = YES;//默认是NO,超出主层边界的内容统统剪掉
//上面一行代码和下面一行代码等价,效果一样
//label.clipsToBounds = YES;
//动画
[UIView animateWithDuration:1.0 animations:^{
label.alpha = 0.5;
} completion:^(BOOL finished){
[UIView animateWithDuration:1.0 delay:1.0 options:UIViewAnimationOptionCurveLinear animations:^{
label.alpha = 0.0;
} completion:^(BOOL finished){
[label removeFromSuperview];//将label从控制器中移除【也从内存中释放了】
}
}
代理设计模式:
添加label到控制器的view这段代码 : 在控制器里面执行
点击下载按钮的时候,应该通知控制器,控制器得知点击了下载按钮,就执行【添加label到控制器的view】这段代码
简单理解就是:当下载按钮被点击的时候,要告诉控制器下载按钮被点了,这时让控制器去做相应的操作。
简单说就是:控制器应该监听 下载按钮的点击
B类要监听A类中的东东,所以B需要成为A类的代理,所以A类需要在自己的类中声明代理
A类.h文件中
@class AppView;
//声明一个协议
@optional
@protocol AppViewDelegate<NSObject>//协议命名规范:以类名开头
- (void)appViewClickedDownloadButton:(AppView *)appView;
@end
@interface AppView : UIView
@property (nonatomic, weak) id<AppViewDelegate> delegate;
@end
A类.m文件中
在需要监听的地方添加代码,例如在按钮的点击事件中写,就相当于B类监听了A类的按钮点击事件
- (IBAction)download:(UIButton *)btn{
//判断某个对象有appViewClickedDownloadButton:方法
//通知代理
if([self.delegate respondsToSelector:@selector(appViewClickedDownloadButton:)])
{
[self.delegate appViewClickedDownloadButton:self];
}
}
在B类中实现A类的协议,成为A类的代理
B类的.m文件
@interface B类 ()<AppViewDelegate>//遵守协议
- (void)test
{
AppView *appView = [[AppView alloc] init];
appView.delegate = self;
}
//下面的方法 当点击了 下载按钮的时候就会调用,因为在下载按钮中通知了本类,因为本类成为了A类的代理
//实现代理的方法【这样,当A类发生什么事情之后,就会通知B类去执行这里实现的代理方法】
- (void)appViewClickedDownloadButton:(AppView *)appView
{
}
相关文章推荐
- iOS时间间隔判断
- IOS 获得项目中info.plist文件的内容 2.沙盒的数据存储及读取 3.控制器view的高度和状态栏statusBar
- 【iOS开发】文件写入沙盒失败
- IOS之Info.plist文件简介
- iOS 如何设置子视图alpha不同于父视图
- 带有pod的ios工程修改工程名
- iOS开发笔记--什么时候调用layoutSubviews
- iOS开发笔记--什么时候调用layoutSubviews
- MailCore2使用简介iOS版
- iOSCoreAnimation动画系列教程(二):CAKeyFrameAnimation【包会】
- Detecting iOS
- IOS各种编译问题
- IOS 中NSUserDefaults的用法(轻量级本地数据存储)
- iOSCoreAnimation动画系列教程(一):CABasicAnimation【包会】
- iOS 表格视图与CoreData配合使用 点击后被点击的cell消失问题
- IOS TableView的Delegate Methods-tableView didSelectRowAtIndexPath
- iOS设定指定文字颜色为红色
- [iOS实战进阶]iOS开发完毕,提测时如何发包
- iOS开发如何在外面拿到一个子控件的frame ????
- iOS 技术分享2