fol*_*lex 7 c# uikit xamarin.ios uiviewanimation ios
好吧,每个人都知道在ObjC我们有
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
Run Code Online (Sandbox Code Playgroud)
请注意,completion块具有BOOL参数.现在让我们来看看Monotouch:
public static void Animate (double duration, double delay, UIViewAnimationOptions options, NSAction animation, NSAction completion)
Run Code Online (Sandbox Code Playgroud)
NSAction是:
public delegate void NSAction ();
Run Code Online (Sandbox Code Playgroud)
只是没有任何争论的代表.此外,在Monotouch"内部"我们可以看到:
public static void Animate (double duration, double delay, UIViewAnimationOptions options,
NSAction animation, NSAction completion)
{
UIView.AnimateNotify (duration, delay, options, animation, delegate (bool x)
{
if (completion != null)
{
completion ();
}
});
}
Run Code Online (Sandbox Code Playgroud)
注意delegate (bool x),它就像我需要的那样调用函数.现在,我如何通过Action<bool>完成UIView.Animate?
这是一个旧的绑定错误(错误的类型),并且出于兼容性原因,Animate仍然使用NSAction完成处理程序.
为了解决这个问题AnimateNotify,MonoTouch添加了一种新方法.这个版本接受一个UICompletionHandler定义如下:
public delegate void UICompletionHandler (bool finished);
Run Code Online (Sandbox Code Playgroud)
因此,您的问题的解决方案是使用较新的AnimateNotifyAPI.
所以这应该是这样的:
UIView.AnimateNotify(duration, 0, UIViewAnimationOptions.CurveEaseInOut, delegate () {
}, delegate (bool finished) {
});
Run Code Online (Sandbox Code Playgroud)
或者使用lambda语法:
UIView.AnimateNotify(duration, 0, UIViewAnimationOptions.CurveEaseInOut, () => {
}, (finished) => {
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2471 次 |
| 最近记录: |