iOS自定义AlertView

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

代码非常少,但效果十分出众。
首先我用xib创建了需要自定义的提示视图,建立好约束
iOS自定义AlertView_第2张图片

建立对应的类我这里就叫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就可以了。

你可能感兴趣的:(IOS开发)