您的位置:首页 > 移动开发 > IOS开发

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

{

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: