iOS仿AirPods彈出動畫
本文實例為大家分享了iOS仿AirPods彈出動畫的具體代碼,供大家參考,具體內容如下
效果圖

預覽圖
思路
在當前ViewController下Present另外一個AnimationViewController,在彈出的AnimationViewController中播放動畫,彈出的時候原來的ViewController上有一個全屏覆蓋的maskView,在彈出時,有一個漸變動畫(頁面漸黑),在AnimationViewController聲明一個代理,在代理方法中實現(xiàn)收起的動畫效果(dissmissController和maskView消失)
主要代碼
HCAirPodsAnimationViewController *vc = [[HCAirPodsAnimationViewController alloc] init];
vc.delegate = self;
vc.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[UIView animateWithDuration:0.2 animations:^{
self.maskBgView.alpha = 0.5;
} completion:nil];
[self presentViewController:vc animated:YES completion:^{
[vc.animationView play];
}];
模態(tài)跳轉的style有一個枚舉值,在iOS13以前modalPresentationStyle的默認值為UIModalPresentationFullScreen,iOS13以后變成了UIModalPresentationPageSheet,在這里我們把style設置為UIModalPresentationOverCurrentContext彈出的這個控制器就會覆蓋在原來的控制器之上
- (UIView *)maskBgView
{
if (!_maskBgView) {
_maskBgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
_maskBgView.backgroundColor = [UIColor blackColor];
_maskBgView.alpha = 0;
[self.view addSubview:_maskBgView];
}
return _maskBgView;
}
一個覆蓋全屏的maskView采用懶加載的方式實現(xiàn)
- (void)initContentView
{
CGFloat containerW = SCREEN_WIDTH - 20;
CGFloat containerH = containerW * 0.9;
UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(10, SCREEN_HEIGHT - containerH - 10, containerW, containerH)];
containerView.layer.cornerRadius = 20;
containerView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:containerView];
self.animationView = [[LOTAnimationView alloc] initWithFrame:CGRectMake(70, 70, containerW - 140, containerH - 140)];
[containerView addSubview:self.animationView];
self.animationView.animation = @"gift_animation";
self.animationView.loopAnimation = YES;
UIButton *confirmButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 34)];
confirmButton.center = CGPointMake(self.animationView.center.x, containerH - 44);
[confirmButton setTitle:@"Close" forState:UIControlStateNormal];
[confirmButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[confirmButton setBackgroundColor:[UIColor blueColor]];
confirmButton.layer.cornerRadius = 10;
[confirmButton addTarget:self action:@selector(onConfirmButtonClick) forControlEvents:UIControlEventTouchUpInside];
[containerView addSubview:confirmButton];
}
動畫這里用到的是Lottie這個動畫開源庫(Airbnb),這個開源庫主要的功能是可以將After Effects制作的動畫通過插件導出為json格式的文件,然后通過這個開源庫解析成動畫。
- (void)onConfirmButtonClick
{
if ([self.delegate respondsToSelector:@selector(onAirPodsAnimationViewControllerConfirmButtonClick:)]) {
[self dismissViewControllerAnimated:YES completion:nil];
[self.delegate onAirPodsAnimationViewControllerConfirmButtonClick:self];
}
}
dissmiss當前的控制器,讓viewController來實現(xiàn)這個代理方法,并且在代理方法中隱藏maskView
- (void)onAirPodsAnimationViewControllerConfirmButtonClick:(HCAirPodsAnimationViewController *)vc
{
[UIView animateWithDuration:0.2 animations:^{
self.maskBgView.alpha = 0.0;
} completion:nil];
}
項目地址:AirPodsAnimation
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
ios uicollectionview實現(xiàn)橫向滾動
這篇文章主要為大家詳細介紹了ios uicollectionview實現(xiàn)橫向滾動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03
IOS中用正則表達式判斷輸入的內容為8-16位且同時包含數(shù)字和字母
這篇文章主要介紹了IOS中用正則表達式判斷輸入的內容為8-16位且同時包含數(shù)字和字母,需要的朋友可以參考下2017-06-06
iOS 隱私權限和通過openURL實現(xiàn)跳轉實例
這篇文章主要介紹了iOS 隱私權限和通過openURL實現(xiàn)跳轉實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06

