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

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

    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 (自己創建的類中),重寫 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);//判斷點擊點是否顯示層內
    return isInside;
    
}
并且動畫要使用 options:為UIViewAnimationOptionAllowUserInteraction(開啟用戶交互,UIImageView、UILabel 默認是 NO)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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