启动延迟动画后,UIButton上的触摸事件将停止

时间:2016-06-03 12:43:53

标签: objective-c swift xamarin uibutton xamarin.ios

我在UIButton内创建UIView。如果我在UIView停止点击的myButton_TouchUpInside 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的{​​{1}}是关键所在。我将UIButton添加到Frame之后检查了UIView,然后再次检查Action中已完成的UIView.Transition(上面的代码中未显示),它的大小和位置是完全相同的。

修改

这不是引起问题的过渡,它是随后的动画(UIView在X秒后逐渐消失后滑动)。直接跟随转换是这段代码:

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

如果我删除它,它就可以。

1 个答案:

答案 0 :(得分:0)

好的,不是使用内置延迟属性,而是将其包装在async方法中,如下所示:

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