我创建了一个交互式过渡.我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) 我有一个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'而不是"
这可能是一个愚蠢的问题,但我必须承认我迷失了......
谢谢你的帮助
我有一个字符串var oneString: String!,后来在一个方法中,当我想连接一个字符串,oneString我必须这样做:
oneString! += anyString
Run Code Online (Sandbox Code Playgroud)
如果我不添加,!我会收到错误'String!' is not identical to 'CGFloat'
如果我初始化我的字符串var oneString = ""我没有这个问题.为什么?为什么我需要打开,oneString而我明确表示在我宣布它时它不会是零?
我有时会有一个标题部分(只有一个,因为我只有一个部分).我添加了一个手势(单击),如下所示:
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,而不是一个UITableViewHeaderFooterView或UITableViewCell所以我不能注册它(我想...).
它到目前为止工作,因为我也在表视图上添加了手势.
因此,当手势添加到整个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) 我只想显示日期的日期和月份,但是我希望根据用户的语言环境显示它。
例如,我有以下日期: 21/05/2015 00:16:00 GMT+10
我想拥有May 21语言环境是例如en_US还是21 May语言环境fr_FR。
我看着用dateStyle的NSDateFormatter格式,但无法找到我想要的东西。
我有一个网络方法,返回一个完成闭包,带有一个Error参数.
我通常会避免强行展开,但在这种情况下,我会使用一个guard语句来检查是否error不是nil:
guard error == nil else {
print(error!)
return
}
...
Run Code Online (Sandbox Code Playgroud)
我正在调用的方法来自SDK,所以我真的不知道那里发生了什么.
一般情况下,这种力量解开线程是否安全?
我试图在表视图上添加刷新控件,但无法按我的要求进行。
我有一个视图,其中包含一个表视图。我的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行,并且在我们下拉第一行时就从顶部取消隐藏。
内置的刷新控件有可能吗?
谢谢
我用CGContextFillEllipseInRectfrom 创建了一个圆圈CoreGraphic.
我正在使用这个圆圈(实际上是一个磁盘)来替换thumbImage它UISlider.默认情况下应用抗锯齿.
但是我的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) 到目前为止,我将我的双打格式化为这样的字符串:
String(format:"%0.4f", rate)
Run Code Online (Sandbox Code Playgroud)
问题:小数分隔符总是.在法国,例如我们使用,
然后,我用了一个NSNumberFormatter与numberStyle = .DecimalStyle后来为我做之前,我不能选择的4位数字的精度.
我的解决方案是什么?
谢谢
我有一组UIButtons每个标签只是一个数字.在它们的每个按钮上,我将背景颜色设置为清除,没有UIImage设置.
问题是那些按钮只能在他们的标签上点击,这使得它很难点击.
我检查了这个问题,一些解决方案是:
button.contentEdgeInsets = UIEdgeInsetsMake(-50, -50, -50, -50)- >没有更改内容pointInside- >不起作用,pointInside当点击按钮但在标签之外时从未到达.我很惊讶这种正常用例没有简单的解决方案.我需要背景清晰,因为我正在使用这些按钮进行今天的扩展.
知道怎么做吗?
编辑:
这是一个示例项目,我重现了这个问题.
它似乎与今天扩展中的静态单元格相关联,因为它可以在应用程序中的视图控制器中使用静态单元格.