iOS自定义AlertView

来源:互联网 发布:h5小游戏网站源码 编辑:程序博客网 时间:2024/05/22 10:16

虽然系统的AlertView(AlertController)已经非常简单易用了,但偶尔还是想做些更酷炫的交互或者需要添加很多自定义的内容,这时候需要自定义个View来实现个性化的AlertView。
先来看看成品:
这里写图片描述

代码非常少,但效果十分出众。
首先我用xib创建了需要自定义的提示视图,建立好约束
这里写图片描述

建立对应的类我这里就叫MyAlertView
之后outlet中心需要动画的view,这里叫做centerView

@property (weak, nonatomic) IBOutlet UIView *centerView;

在自定义类MyAlertView中充写awakefromnib方法实现动画,并实现退出按钮的反向动画

- (void)awakeFromNib{    self.centerView.transform = CGAffineTransformMakeScale(0, 0);    self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0];    [UIView animateWithDuration:0.5 delay:0 usingSpringWithDamping:0.6 initialSpringVelocity:0.2 options:UIViewAnimationOptionCurveEaseIn animations:^{        self.centerView.transform = CGAffineTransformMakeScale(1, 1);        self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];    } completion:^(BOOL finished) {    }];  }- (IBAction)quit:(id)sender {    [UIView animateWithDuration:0.3 delay:0 usingSpringWithDamping:0.6 initialSpringVelocity:0.2 options:UIViewAnimationOptionCurveEaseIn animations:^{        self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0];        self.centerView.transform = CGAffineTransformMakeScale(0.0001, 0.0001);    } completion:^(BOOL finished) {        [self removeFromSuperview];    }];}

最后在主控制器中创建自定义的“AlertView”,并展现出来

- (IBAction)showAlert:(id)sender{    MyAlertView *alert = [[NSBundle mainBundle] loadNibNamed:@"MyAlertView" owner:nil options:nil][0];    alert.frame = self.view.bounds;    [self.view addSubview:alert];}

十分简单,但有一点需要注意最后移除view的动画设置缩放参数的时候不可以设置为0,否则动画不会显示,这里用了级小值0.0001来近似0的效果。

        self.centerView.transform = CGAffineTransformMakeScale(0.0001, 0.0001);

最后,用自定义view来实现虽然可以奏效,但反观苹果在iOS8中用AlertContrller来代替AlertView,这种模态视图用控制器来管理结构才是比较清晰的,所以这里可以用自定义控制器来实现同样功能,模态弹出的时候presentation的方式需要设置为Over Current Contxt就可以了。

1 0