簡體   English   中英

移動UIButton是否不可單擊?

[英]Moving UIButton is not clickable?

我們為按鈕上的某些氣泡效果制作了此動畫,但它阻止了他被點擊。 如果我們禁用此動畫,他將起作用。

我們可以修復它以使其與動畫一起使用嗎?

 CGRect initi=[[initialPositions objectAtIndex:b.tag] CGRectValue];
        int r1=arc4random()%4;
        int r2=arc4random()%4;
        initi.origin.x+=r1;
        initi.origin.y+=r2;


        [UIView animateWithDuration:0.8 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^
         {
            b.frame=initi;

         }
          completion:^(BOOL completed){    }];

據我所知,該按鈕在動畫過程中實際上並沒有禁用或不可單擊。 動畫開始時,按鈕的觸摸區域會立即移動到動畫結束時按鈕所在的位置。 這使得在動畫過程中感覺該按鈕不可單擊。

從觸摸邏輯的角度來看,按鈕只是從A移到B,而A和B之間的動畫只是讓人眼前一亮。 這解釋了為什么在兩點之間無法觸摸。

唯一可行的解​​決方案是滾動自己的動畫例程。 如果您想走這條路,這篇文章稱為iOS動畫間隔的聖杯? 本·博伊科(Ben Bojko)撰寫的文章應指出正確的方向。

正如Markus在回答中所說的那樣(已投票),該按鈕實際上在動畫開始時移動到其結束位置,並在動畫開始后立即接受那里的點擊。 動畫實際上發生在視圖層次結構的“表示層”中。

您可以使用Markus的建議來制作自己的動畫,但這是處理器密集型的,並且不如基於圖層的動畫流暢(這是UIView動畫在幕后的工作方式)。

如果您想使用UIView動畫並讓按鈕在動畫進行時響應點擊,則需要使整個動畫可單擊的超級視圖可點擊,並在按鈕的表示層上執行點擊測試以找出是否點擊按下按鈕與否。 (超級視圖會輕按一下,然后使用hitTest:方法檢查它的坐標以查看它是否在按鈕的表示層之內。)

我在github上有一個名為iOS CAAnimationGroup演示 (鏈接)的項目,該項目演示如何針對基於CAAnimation的動畫和基於UIView的動畫執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM