为了在Swift应用程序中添加一个类似于“存折菜单”的菜单,我从Github找到了一个用Objective-C编写的适当演示。 然后我将ObjC顺利翻译成Swift,直到在原始演示中找到了两个Block。 在我检查了一些指导书之后,我才知道应该将Block转换为Closure。

我尝试了,但失败了。 编译器抛出“ animatedWithDuration()缺少参数'delay'的参数”的故障

  1. 首先,我需要声明我没有选择animatedWithDuration()具有参数“ delay”的方法。
  2. 我不太理解两个带有许多感叹号的句子。 “ if(中途)(完成)”和“ if(完成)完成(完成)”,因为“ if”句子始终只写一个“()”,而不是两个。
  3. 请告诉我我在代码中哪里写错了什么。

非常感谢您的时间和指导。

伊桑·乔

原始代码:

- (void)flipTransitionWithOptions:(UIViewAnimationOptions)options halfway_1:(void (^)(BOOL finished))halfway completion:(void (^)(BOOL finished))completion
{
    CGFloat degree = (options & UIViewAnimationOptionTransitionFlipFromRight) ? -M_PI_2 : M_PI_2;

CGFloat duration = 0.4;
CGFloat distanceZ = 2000;
CGFloat translationZ = self.frame.size.width / 2;
CGFloat scaleXY = (distanceZ - translationZ) / distanceZ;

CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -distanceZ; // perspective
rotationAndPerspectiveTransform = CATransform3DTranslate(rotationAndPerspectiveTransform, 0, 0, translationZ);

rotationAndPerspectiveTransform = CATransform3DScale(rotationAndPerspectiveTransform, scaleXY, scaleXY, 1.0);
self.layer.transform = rotationAndPerspectiveTransform;

[UIView animateWithDuration:duration / 2 animations:^{
    self.layer.transform = CATransform3DRotate(rotationAndPerspectiveTransform, degree, 0.0f, 1.0f, 0.0f);
} completion:^(BOOL finished){
    if (halfway) halfway(finished); !!!!!!!!!!!!!!!!!!!
    self.layer.transform = CATransform3DRotate(rotationAndPerspectiveTransform, -degree, 0.0f, 1.0f, 0.0f);
    [UIView animateWithDuration:duration / 2 animations:^{
        self.layer.transform = rotationAndPerspectiveTransform;
    } completion:^(BOOL finished){
        self.layer.transform = CATransform3DIdentity;
        if (completion) completion(finished); !!!!!!!!!!!!!!!!
    }];
}];

My copy-translated version:

UIView.animateWithDuration(duration / 2, animations: {self.layer.transform = CATransform3DRotate(rotationAndPerspectiveTrabsform, degree, 0.0, 1.0, 0.0)}, completion: {(finshed) -> Void in if halfway(finished) { self.layer.transform = CATransform3DRotate(rotationAndPerspectiveTrabsform, -degree, 0.0, 1.0, 0.0) UIView.animateWithDuration(duration / 2, animations: {self.layer.transform = rotationAndPerspectiveTrabsform}, completion: {(finished) -> Void in self.layer.transform = CATransform3DIdentity if completion(finshed){} }) } } ) }

}

#1楼 票数:1 已采纳

尝试在第一个参数上用NSTimeInterval(duration / 2)替换duration / 2

  ask by Ethan Joe translate from so

未解决问题?本站智能推荐:

1回复

在IBAction中:“传递给不带参数的调用的参数”

从我所看到的,解决此错误的最佳方法: 传递给不带参数的调用的参数 将使用 但是,在此代码中似乎无法实现它!
1回复

Swift闭包-无法转换类型(_)->()的值?到预期的参数类型(()->())?

我正在Xcode 9,Swift 4中使用SideMenuController pod。试图使侧面板动画正常工作。 无法弄清楚为什么会抛出此错误。 在此先感谢您的帮助!
3回复

为什么Apple的闭包声明缺少参数标签

当我阅读UIKit ,大多数时候我看到闭包(作为函数参数)缺少这样的参数标签: func fooClosure(fooClosure: (Bool) -> Swift.Void) 在某些情况下,我可以猜测它代表什么,而在另一些情况下,我则无法。 例: 看一下UIActivity
2回复

带参数和不带参数的闭包语法

iOS 13,斯威夫特 5 我正在尝试了解 Swift 中的闭包语法,几乎就在那里。 我得到了前三个 bon,并且理解了它们; 但最后没有。 我如何在这里调用 self.theMethod4 ? 显示的语法是错误的!
2回复

嵌套参数化闭包参数异常

我正在尝试使用UIView.animateWithDuration执行一组嵌套的动画,但是无论我使用的闭包返回参数如何,我似乎都会得到异常。 无法使用类型为'(NSTimeInterval,delay:NSTimeInterval,options:UIViewAnimationOption
2回复

在Objective-C和Swift中编写不返回任何参数且不接受任何参数的闭包的所有有效方法是什么?

我无法理解 Swift 和 Objective-C 中的闭包语法。 有人能告诉我用两种语言编写一个不接受任何参数并且不返回任何内容的闭包的所有可能方法吗?
1回复

匿名闭包参数不能在具有显式参数的闭包内使用

我对Swift相对较新,并且仍然掌握了闭包的概念。 我已经阅读过这篇文章( 匿名闭包不能在具有显式参数的闭包内使用 )。 但是,答案是将过滤器从()更改为{},但我不知道如何将其实现到我的函数中。 错误在$0.value = imagez 。 我从Parse下载了图像数据,并希望将其
1回复

快速传递带有参数作为参数的闭包

因此,该想法是使通用警报创建者可以将完成处理程序传递给...。 但是..... xcode迫使我将_放在这里,并且迫使我将@转义到那里.... 还有.....当我尝试称其为一团糟....它甚至不会编译: 所以我尝试$ 0代替newText我得到 “匿名闭包参数不能在具有显式参数