介绍
项目开发中因为需要一个消息提醒,找了相当久都没找到合适的,最后决定还是自己来写一个吧。渣就渣,起码能够符合需求。
通过这么弄一弄,倒是加深了对UIView自带的动画效果的认识,这也是个不错的结果。
<br />
效果
AlertMessage.gif
恩,大概就是这样。
AlertMessage.h
@interface AlertMessage : UIView
-(id)initWithY:(CGFloat)y andTitle:(NSString *)title; //用字符串和显示坐标来初始化
-(id)initWithY:(CGFloat)y;
-(id)initWithTitle:(NSString *)title;
-(void)setStartWithY:(CGFloat)y; //设置显示坐标
-(void)setTitle:(NSString *)title; //设置显示字符串
-(void)showWithCover:(BOOL)boolean; //显示并设置显示之后还能否操作
-(void)dismiss; //移除提醒
-(void)setTitleColor:(UIColor *)titleColor; //设置字符串颜色
-(void)setAlertColor:(UIColor *)alertColor; //设置背景颜色
-(void)setAlertColor:(UIColor *)alertColor andTitleColor:(UIColor *)titleColor;
-(void)setDismissOnLeft:(BOOL)isOnLeft; //设置从哪个方向消失
@end
头文件里面大概就是这样的结构。
可以设置显示的地方,显示的文字,很简单。实现的功能也很简单。
<br />
AlertMessage.m
其实在实现文件里面,核心只有一个。那就是设置好起始坐标,以及播放动画后所移动到的坐标。
大概就是:
#define HEIGHT_ALERT 55
#define WIDTH_ALERT 180
#define Y_OFFSET_ALERT 100
#define X_OFFSET_ALERT (320 - WIDTH_ALERT)
……
-(id)init {
self = [self initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width, Y_OFFSET_ALERT, WIDTH_ALERT, HEIGHT_ALERT)];
//设置初始位置,就是在屏幕之外了
return self;
}
-(void)show{
[UIView animateWithDuration:0.35f animations:^{
[self setFrame:CGRectMake([UIScreen mainScreen].bounds.size.width - WIDTH_ALERT, self.y, WIDTH_ALERT, HEIGHT_ALERT)];
//动画执行,并移动到结束位置
} completion:^(BOOL finished) {
//动画结束后执行
}];
}
-(void)dismiss{
[UIView animateWithDuration:duration animations:^{
[self setFrame:CGRectMake(endPoint, Y_OFFSET_ALERT, WIDTH_ALERT, HEIGHT_ALERT)];
//动画执行,并移动到结束位置
} completion:^(BOOL finished) {
//动画结束后执行
}];
}
上面就是实现文件里面的核心部分了,其实就是播放动画。
写在最后
第一次尝试着写这样的自定义类,封装也花了不少时间。
最后做出了项目需要的效果,也是感慨。
至于源代码,找到合适的地方之后就会放出,反正这么简单的东西。大牛都表示一看就知道怎么弄了!
网友评论