小编Nic*_*ico的帖子

UIPercentDrivenInteractiveTransition无法在快速手势上完成动画

我创建了一个交互式过渡.我func animateTransition(transitionContext: UIViewControllerContextTransitioning)很正常,我得到了容器UIView,我添加了两个UIViewControllers,然后我做了动画更改UIView.animateWithDuration(duration, animations, completion).

我添加了一个UIScreenEdgePanGestureRecognizer来自我的UIViewController.它运作良好,除非我做一个非常快速的平底锅.

在最后一个场景中,应用程序没有响应,仍然是相同的UIViewController(转换似乎没有工作)但后台任务运行.当我运行时Debug View Hierarchy,我看到的是新的UIViewController而不是前一个,而前一个(至少是它UIView)代表它应该在转换结束时站立的位置.

我做了一些打印和检查点,从中我可以说,当问题发生时,动画的完成(我animateTransition方法中的那个)没有到达,所以我无法调用transitionContext.completeTransition方法来完成或不完成转换.

我也可以看到平底锅有时从UIGestureRecognizerState.Began直线走到UIGestureRecognizerState.Ended没经过UIGestureRecognizerState.Changed.

当它通过UIGestureRecognizerState.Changed,translation velocity留为每个相同UIGestureRecognizerState.Changed的状态.

编辑:

这是代码:

animateTransition 方法

func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
    self.transitionContext = transitionContext

    let containerView = transitionContext.containerView()
    let screens: (from: UIViewController, to: UIViewController) = (transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!, …
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller ios swift

5
推荐指数
1
解决办法
3671
查看次数

如果语句在Swift中有多个条件

我有一个if语句,我希望有两个条件,如下所示:

if let name = json["resource"]["fields"]["name"].stringValue && name.hasPrefix("/")
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到错误"使用未解析的标识符名称".那么解决方案是什么?

if let name = json["resource"]["fields"]["name"].stringValue && "test".hasPrefix("/"){
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我得到一个错误"可选类型'$ T16'不能用作布尔值;测试'!= nil'而不是"

这可能是一个愚蠢的问题,但我必须承认我迷失了......

谢谢你的帮助

swift

4
推荐指数
1
解决办法
2833
查看次数

在这种情况下,为什么我必须显式解包我的字符串?

我有一个字符串var oneString: String!,后来在一个方法中,当我想连接一个字符串,oneString我必须这样做:

oneString! += anyString
Run Code Online (Sandbox Code Playgroud)

如果我不添加,!我会收到错误'String!' is not identical to 'CGFloat'

如果我初始化我的字符串var oneString = ""我没有这个问题.为什么?为什么我需要打开,oneString而我明确表示在我宣布它时它不会是零?

swift

3
推荐指数
1
解决办法
389
查看次数

如何知道在UITableView的标题部分进行了点击?

我有时会有一个标题部分(只有一个,因为我只有一个部分).我添加了一个手势(单击),如下所示:

let singleTap = UIShortTapGestureRecognizer(target: self, action: "singleTap:")
singleTap.numberOfTapsRequired = 1
singleTap.numberOfTouchesRequired = 1
tableView.headerViewForSection(0)?.addGestureRecognizer(singleTap)
Run Code Online (Sandbox Code Playgroud)

有用.问题是,当我的tableView只有几行时,如果我在最后一行(空白区域)下方点击,它也会触发手势.

怎么避免呢?我想的方法可能是检查水龙头的位置是否在标题的范围内,但我不知道该怎么做.

对于正常的行,它很容易,我只是使用tableView.indexPathForRowAtPoint(point: CGPoint)但是标题怎么样?

编辑:

看来我需要注册我的头,当我打电话得到的东西tableView.headerViewForSection(0),但问题是,我的头是一个UIView,而不是一个UITableViewHeaderFooterViewUITableViewCell所以我不能注册它(我想...).

它到目前为止工作,因为我也在表视图上添加了手势.

因此,当手势添加到整个tableView时,当我从手势获取视图时,我得到tableView而不是标题.

所以我所做的是使用其标签从tableView获取标题:

let header = tableView.viewWithTag(Tag.Header.rawValue)
Run Code Online (Sandbox Code Playgroud)

然后检查点击位置是否在标题视图中:

let location = sender.locationInView(sender.view)
if header!.pointInside(location, withEvent: nil) { ... }
Run Code Online (Sandbox Code Playgroud)

uitableview ios swift

3
推荐指数
2
解决办法
6181
查看次数

如何仅显示基于语言环境的日期和月份?

我只想显示日期的日期和月份,但是我希望根据用户的语言环境显示它。

例如,我有以下日期: 21/05/2015 00:16:00 GMT+10

我想拥有May 21语言环境是例如en_US还是21 May语言环境fr_FR

我看着用dateStyleNSDateFormatter格式,但无法找到我想要的东西。

nsdateformatter ios swift

3
推荐指数
1
解决办法
797
查看次数

在检查它是否为零之后强制打开可选项是否安全

我有一个网络方法,返回一个完成闭包,带有一个Error参数.

我通常会避免强行展开,但在这种情况下,我会使用一个guard语句来检查是否error不是nil:

guard error == nil else {
    print(error!)
    return
}

...
Run Code Online (Sandbox Code Playgroud)

我正在调用的方法来自SDK,所以我真的不知道那里发生了什么.

一般情况下,这种力量解开线程是否安全?

swift

3
推荐指数
1
解决办法
961
查看次数

与单元格一起移动的TableView上的UIRefreshControl

我试图在表视图上添加刷新控件,但无法按我的要求进行。

我有一个视图,其中包含一个表视图。我的ViewController的viewDidLoad函数如下:

override func viewDidLoad() {
    super.viewDidLoad()

    // set the refresh control
    self.refreshControl = UIRefreshControl()
    self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    self.refreshControl.addTarget(self, action: "getData", forControlEvents: UIControlEvents.ValueChanged)
    self.tableView.addSubview(refreshControl)
}
Run Code Online (Sandbox Code Playgroud)

一切正常,除了当我下拉行以触发刷新控件时,刷新控件出现在第一行之后,并终止于第一行的顶部(正常情况下,我将这些行下拉...)。

我想要得到的就像在许多应用程序中一样,当您下拉行时,刷新控件的行为就像是#-1行,并且在我们下拉第一行时就从顶部取消隐藏。

内置的刷新控件有可能吗?

谢谢

uirefreshcontrol swift

2
推荐指数
1
解决办法
2170
查看次数

使用抗锯齿为视网膜显示创建圆形或磁盘

我用CGContextFillEllipseInRectfrom 创建了一个圆圈CoreGraphic.

我正在使用这个圆圈(实际上是一个磁盘)来替换thumbImageUISlider.默认情况下应用抗锯齿.

但是我的iPhone 6上的结果显然不太好.我可以清楚地看到像素,而不是关闭抗锯齿,但比普通UISlider的像素更多.

也许我做错了什么.所以我的问题是,有没有办法以编程方式获得与UISlider默认使用的相同的漂亮磁盘?

编辑:

以下是我创建磁盘的方法:

class func drawDisk(rgbValue:UInt32, rectForDisk: CGRect = CGRectMake(0.0, 0.0, 1.0, 1.0)) -> UIImage {
    let color = uicolorFromHex(rgbValue)
    UIGraphicsBeginImageContext(rectForDisk.size)
    let context = UIGraphicsGetCurrentContext()

    CGContextSetFillColorWithColor(context, color.CGColor)
    CGContextFillEllipseInRect(context, rectForDisk)

    let rectForCircle = CGRectMake(0.5, 0.5, rectForDisk.size.width - 1, rectForDisk.size.height - 1)
    CGContextSetLineWidth(context, 1.0)
    CGContextSetStrokeColorWithColor(context,
            UIColor.blackColor().CGColor)
    CGContextAddEllipseInRect(context, rectForCircle)
    CGContextStrokePath(context)

    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return image
}
Run Code Online (Sandbox Code Playgroud)

core-graphics ios swift

2
推荐指数
1
解决办法
277
查看次数

如何将十进制数(double)格式化为具有一定精度且基于默认Locale的字符串?

到目前为止,我将我的双打格式化为这样的字符串:

String(format:"%0.4f", rate)
Run Code Online (Sandbox Code Playgroud)

问题:小数分隔符总是.在法国,例如我们使用,

然后,我用了一个NSNumberFormatternumberStyle = .DecimalStyle后来为我做之前,我不能选择的4位数字的精度.

我的解决方案是什么?

谢谢

swift

1
推荐指数
1
解决办法
2990
查看次数

使用清晰的背景颜色使UIButton内容完全可插拔

我有一组UIButtons每个标签只是一个数字.在它们的每个按钮上,我将背景颜色设置为清除,没有UIImage设置.

问题是那些按钮只能在他们的标签上点击,这使得它很难点击.

我检查了这个问题,一些解决方案是:

  • 更改内容插入:button.contentEdgeInsets = UIEdgeInsetsMake(-50, -50, -50, -50)- >没有更改内容
  • 子类UIButton和override pointInside- >不起作用,pointInside当点击按钮但在标签之外时从未到达.

我很惊讶这种正常用例没有简单的解决方案.我需要背景清晰,因为我正在使用这些按钮进行今天的扩展.

知道怎么做吗?

编辑:

这是一个示例项目,我重现了这个问题.

它似乎与今天扩展中的静态单元格相关联,因为它可以在应用程序中的视图控制器中使用静态单元格.

uibutton ios swift

1
推荐指数
1
解决办法
955
查看次数