前言html
这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇。 git
声明
欢迎转载,但请保留文章原始出处:)
博客园:http://www.cnblogs.com
农民伯伯: http://over140.cnblogs.comgithub
正文async
一、用动画更新约束没有动画效果?ide
缺乏 layoutIfNeeded ,事例:工具
UIView.animateWithDuration(0.15, animations: { () -> Void in self.heightConstraint.constant = 100 self.view.layoutIfNeeded() // 这行不能少 })
二、处理单击和双击冲突动画
singleTapRecognizer.requireGestureRecognizerToFail( doubleTapRecognizer )ui
可是有一个问题,单击响应会变慢,因此最好更改设计方案。spa
三、获取 UILabel 的行数(不受 Lines 限制)设计
extension UILabel { func lineCount() -> Int { if let text = self.text { let size = NSString(string: text).boundingRectWithSize(CGSizeMake(bounds.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName : self.font], context: nil) return Int(ceil(size.height / self.font.lineHeight)) } return 0 } }
四、自定义分享(分享到 Facebook、Twitter、Weibo)
原本不打算写,主要是搜索的时候没有很快搜到相关结果
func shareSocialAction(serviceType: String) { let vc = SLComposeViewController(forServiceType: serviceType) vc.setInitialText("欢迎来看直播") vc.addImage(UIImage(named: "cover")) vc.addURL(NSURL(string: "https://shou.tv/over140")) presentViewController(vc, animated: true, completion: nil) }
传入 SLServiceTypeTwitter 就能分享到 Twitter 了,查找一下定义就能看到分享到别,这里还有一个全的:OvershareKit
注意:let vc = SLComposeViewController(forServiceType: serviceType) 可能会返回 nil ,须要加判断处理(网上有说国行的 iPhone 可能屏蔽掉了)。我这里的处理办法是走 Twitter 和 Facebook 的 SDK 发起分享。
五、IQKeyboardManager 禁止某个 UITextField 的工具栏
针对 ViewController 级别禁用工具栏:IQKeyboardManager.sharedManager().disableToolbarInViewControllerClass ,若是这个 UITextField 直接 add 到 window 上的这个方法就无论用了,能够直接设置 inputAccessoryView = UIView() 便可。
六、AFNetworking 3.0 输出 Log
let networkLogger = AFNetworkActivityLogger.sharedLogger() networkLogger.startLogging() let console = AFNetworkActivityConsoleLogger() console.level = AFHTTPRequestLoggerLevel.AFLoggerLevelDebug networkLogger.addLogger(console)
七、AVCaptureDevice.requestAccessForMediaType 受权失败弹 UIAlertView 须要放到 dispatch_async(dispatch_get_main_queue()) 主线上
AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: {[weak self](granted: Bool) in if granted { // 受权成功 } else { // 受权失败,弹一个 UIAlertView dispatch_async(dispatch_get_main_queue()) { //UIAlertView.... } } })
若是不增长 dispatch_async(dispatch_get_main_queue()) 这个代码,在部分设备上提示 UIAlertView 这行崩溃。
系列