iOS 動畫過程中不響點擊事件

項目中有飄屏彈幕,這東西,然后呢?添加點擊事件的時候,發(fā)現(xiàn)動畫過程中,點擊是不會被調(diào)用的。然后查了一下,在動畫的時候其實是 layer 在做動畫的。CALayer的兩個非常重要的屬性:presentationLayer(展示層) 和 modelLayer(模型層),大家可以看這篇博客了解一二。iOS CoreAnimation專題——原理篇(三) CALayer的模型層與展示層
(其實是來的時候可以的,比方說:從右邊飄到左邊的過程中,只要這個 presentationLayer 與我們設(shè)置 View 的frame 相交的地方,點擊事件是觸發(fā)的。走的動畫就不觸發(fā)了,這是為什么呢?,走的時候,view 的frame 已經(jīng)是在屏幕外面所有不會觸發(fā))

    BRNotiView *notiView = [[BRNotiView alloc] initWithFrame:initWithFrame:CGRectMake(375, 100, 168, 27)];
    CGRect rect = notiView.frame;
    CGRect rect1 = notiView.frame;
    rect.origin.x = 28;
    rect1.origin.x = -rect1.size.width;
    
    [UIView animateWithDuration:3 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
        notiView.frame = rect;
    } completion:^(BOOL finished) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [UIView animateWithDuration:6 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
                notiView.frame = rect1;
            } completion:^(BOOL finished) {
                [notiView removeFromSuperview];
         }];
        });
    }];

解決辦法:在 BRNotiView (自己創(chuàng)建的類中),重寫 pointInside:withEvent: 方法

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event {
    CGRect presentingRect = self.frame;
    if (self.layer.presentationLayer) {//有動畫的時候,才有值
        presentingRect = self.layer.presentationLayer.frame;
    }
    CGPoint superPoint = [self convertPoint:point toView:self.superview];
    BOOL isInside = CGRectContainsPoint(presentingRect, superPoint);//判斷點擊點是否顯示層內(nèi)
    return isInside;
    
}
并且動畫要使用 options:為UIViewAnimationOptionAllowUserInteraction(開啟用戶交互,UIImageView、UILabel 默認是 NO)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 CALayer IOS SDK詳解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi閱讀 5,331評論 3 23
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,626評論 1 32
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,262評論 5 13
  • 有了前兩篇的概念基礎(chǔ),本篇從以下兩點結(jié)合具體代碼探索下CoreAnimation的一些原理。 UIView動畫實現(xiàn)...
    正謙閱讀 2,398評論 2 15
  • 7、不使用IB是,下面這樣做有什么問題? 6、請說說Layer和View的關(guān)系,以及你是如何使用它們的。 1.首先...
    AlanGe閱讀 988評論 0 1

友情鏈接更多精彩內(nèi)容