前言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 這行崩潰。
系列