[英]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.