2016-06-03 2 views
0

Я создаю UIButton внутри UIView. Если я применил переход к UIView, то событие касания myButton_TouchUpInside на UIButton прекратит стрельбу. Может ли кто-нибудь посоветовать? (см редактировать)Прикосновение событий на остановке UIButton после задержки Анимация запущена

(Я использую Xamarin здесь)

UIView myView = new UIView() 
{ 
    BackgroundColor = UIColor.Black, 
    RestorationIdentifier = identifier, 
    UserInteractionEnabled = true, 
    ClipsToBounds = true 
}; 

UIButton myButton = new UIButton() 
{ 
    BackgroundColor = UIColor.Red, 
    UserInteractionEnabled = true 
}; 
myButton.TouchUpInside += myButton_TouchUpInside; 
myButton.SizeToFit(); 
myButton.Frame = new CGRect(0, 10, myButton.Bounds.Width, myButton.Bounds.Height); 

myView.AddSubview(myButton); 
View.AddSubview(myView); 

клик огнь в этой точке. Если добавить переход они перестают работать после перехода произошло, я полагаю, что они остались в переходе:

var myNewFrame = new CGRect(0, 50, myButton.Frame.Width, myButton.Frame.Height); 
UIView.Transition(myView, 0.5, UIViewAnimationOptions.CurveEaseIn,() => { myView.Frame = myNewFrame; }, null); 

Я прочитал, что Frame из UIButton является ключевым здесь. Я проверил Frame после добавления его в UIView, а затем снова в заполненном Action в UIView.Transition (не показано в приведенном выше коде), и его размер и положение точно совпадают.

редактировать

Это не переход, который вызывает проблемы, его анимация, которая следует (в UIView слайды затем через X секунд гаснет). Непосредственно после перехода это код:

UIView.Animate(0.25, 10, UIViewAnimationOptions.CurveEaseInOut,() => { myView.Alpha = 0; },() => { myView.RemoveFromSuperview(); }); 

Если я удалю это, он будет работать.

ответ

0

КИ, а не с помощью свойства встроенной задержки я завернут его в методе асинхронной, как так:

UIView.Transition(myView, 0.5, UIViewAnimationOptions.CurveEaseIn,() => { myView.Frame = myNewFrame; },()=> {FadeOut(duration)}); 

private async FadeOut(int duration){ 
    await Task.Delay(duration * 1000); 
    UIView.Animate(0.25, 0, UIViewAnimationOptions.CurveEaseInOut,() => { myView.Alpha = 0; },() => { myView.RemoveFromSuperview(); }); 
} 
Смежные вопросы