2016-06-03 11 views
0

Ich erstelle eine UIButton innerhalb einer UIView. Wenn ich einen Übergang auf UIView anwende, hört das myButton_TouchUpInside Berührungsereignis auf UIButton auf, zu schießen. Kann jemand beraten? (siehe bearbeiten)Touch-Ereignisse auf UIButton stoppen, nachdem die verzögerte Animation gestartet wurde

(Ich bin mit Xamarin hier)

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); 

Click-Ereignisse Feuer an dieser Stelle. Wenn ich einen Übergang sie aufhören zu arbeiten, fügen Sie nach dem Übergang aufgetreten ist, nehme ich sie im Übergang hinter sich gelassen worden:

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

Ich habe gelesen, dass die Frame der UIButton ist der Schlüssel hier. Ich überprüfte die Frame nach dem Hinzufügen zu der UIView und dann wieder in der fertigen Action in der UIView.Transition (nicht im Code oben gezeigt) und es ist Größe und Position sind genau das Gleiche.

bearbeiten

Es ist nicht der Übergang, der das Problem verursacht, dessen die Animation, die (die es ausblendet UIView gleitet dann nach X Sekunden) folgt. Direkt nach dem Übergang ist dieser Code:

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

Wenn ich dies entfernen, funktioniert es.

Antwort

0

OK, anstatt die eingebaute Verzögerung Eigenschaft verwenden ich es in einem Asynchron-Methode gewickelt, wie so:

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(); }); 
} 
Verwandte Themen