我在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(); });
如果我删除它,它就可以。
答案 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(); });
}