有些弹窗如果点击按钮的同时就出现一个弹窗就显得有的突兀,这次实现的效果是点击按钮的同时弹窗由下往上弹出来,添加了动画效果:
1、首先创建一个弹出的View类,
在HTAlertView.h中:
@property (nonatomic, strong) void (^backBtnActionBlock)();
@property (weak, nonatomic) IBOutlet UIView *myView;
@property(nonatomic,strong) UIControl *huiseControl;
- (void)showInView:(UIView *) view;
+ (instancetype)getSimpleView;
2、在HTAlertView.m中:
- (void)awakeFromNib{
_huiseControl=[[UIControl alloc]initWithFrame:CGRectMake(0, 0, UIBounds.size.width, UIBounds.size.height)];
_huiseControl.backgroundColor=RGBACOLOR(0, 0, 0, 0.4);
[_huiseControl addTarget:self action:@selector(huiseControlClick) forControlEvents:UIControlEventTouchUpInside];
_huiseControl.alpha=0;
self.backgroundColor = [UIColor whiteColor];
}
+ (instancetype)getSimpleView{
NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"HTAlertView" owner:nil options:nil];
return [objs lastObject];
}
- (void)showInView:(UIView *) view {
if (_huiseControl.superview==nil) {
[view addSubview:_huiseControl];
}
[UIView animateWithDuration:0.2 animations:^{
_huiseControl.alpha=1;
}];
CATransition *animation = [CATransition animation];
animation.delegate = self;
animation.duration = 0.2f;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.type = kCATransitionPush;
animation.subtype = kCATransitionFromTop;
[self.layer addAnimation:animation forKey:@"animation1"];
self.frame = CGRectMake(0,view.frame.size.height - 355, [UIScreen mainScreen].bounds.size.width, 355);
[view addSubview:self];
}
- (void)hideInView {
self.hidden = YES;
CATransition *animation = [CATransition animation];
animation.delegate = self;
animation.duration = 0.2f;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.type = kCATransitionPush;
animation.subtype = kCATransitionFromBottom;
[self.layer addAnimation:animation forKey:@"animtion2"];
[UIView animateWithDuration:0.2 animations:^{
_huiseControl.alpha=0;
}completion:^(BOOL finished) {
[self removeFromSuperview];
[_huiseControl removeFromSuperview];
}];
}
- (IBAction)btnClick:(UIButton *)sender {
if (self.backBtnActionBlock) {
self.backBtnActionBlock();
}
}
-(void)huiseControlClick{
[self hideInView];
}
其中
#define UIBounds [[UIScreen mainScreen] bounds] //window外框大小
#define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:a]
最后在viewController中要弹窗的button实现方法即可
- (void)popupButtonClick
{
HTAlertView *alert = [HTAlertView getSimpleView];
alert.backBtnActionBlock = ^(){
NSLog(@"sdgvet4wfdscx");
};
[alert showInView:self.view];
}
其中有代码块可以回调得到View中的按钮触发