iOS 自定義AlertView

iOS 自帶的UIAlertViewUIAlertController功能非常局限,有時(shí)候需要我們自定義AlertView。

下面是我在完成自定義AlertView的方法。

思路:

1.解決視圖問(wèn)題,按照需求寫(xiě)一個(gè)View就行。

2.設(shè)置怎樣的動(dòng)畫(huà)讓視圖彈出

3.自定義的AlertView 如何加在需要展示的視圖上。

調(diào)用自定義的AlertView,要像調(diào)用系統(tǒng)的AlertView那樣簡(jiǎn)單。我們可以根據(jù)系統(tǒng)的AlertView調(diào)用方法,來(lái)揣測(cè)它的實(shí)現(xiàn)方法。

第一步初始化,這兒我們需要初始化視圖

第二步show,讓視圖彈出。系統(tǒng)的實(shí)現(xiàn)直接調(diào)用一個(gè)[alertView show],方法就實(shí)現(xiàn)了這一功能。我想這里它應(yīng)該就是加在UIWindow上的。

定制視圖:首先需要個(gè)蒙板,當(dāng)視圖彈出時(shí)讓整個(gè)也沒(méi)無(wú)法交互。這里需要設(shè)置蒙板的透明度,再將彈出的視圖加在蒙板上。(這里要注意的一點(diǎn),父視圖的透明度會(huì)影響子視圖透明度。解決方法:調(diào)用 view.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.4],這樣設(shè)置透明度不會(huì)影響子視圖透明度)

調(diào)用show方法:可以直接將視圖加在window上 [[[UIApplication sharedApplication].delegate window] addSubview:self]; 這里的self 即視圖本身。

- (void)show
{
    
    if (!_isShow) {
        [[[UIApplication sharedApplication].delegate window]  addSubview:self];
        [self shakeToShow:_alertView];
        _isShow = YES;
    }
    
}

當(dāng)用戶(hù)點(diǎn)擊『確定』或者『取消』按鈕時(shí)。調(diào)用 [self removeFromSuperview]; 就可以。

- (void)hideView {
    [self removeFromSuperview];
}

接著是動(dòng)畫(huà)效果的實(shí)現(xiàn)

這個(gè)彈出效果 要有一種回彈的效果,需要設(shè)置多個(gè)值。這里我選擇關(guān)鍵幀動(dòng)畫(huà)來(lái)完成。

代碼如下:

  - (void)shakeToShow:(UIView*)aView {
    CAKeyframeAnimation* animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
    animation.duration = 0.5;
    NSMutableArray *values = [NSMutableArray array];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 1.0)]];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
    animation.values = values;
    [aView.layer addAnimation:animation forKey:nil];
}

github地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容