IOS“吐司”和 代理的设计模式

类似安卓的吐司:(包含动画、圆角,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

{


}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值