【Swift】iOS開發筆記(二)
前言
這個系列主要是一些開發中遇到的坑記錄分享,有助於初學者跨過這些坑,攢夠 7 條發一篇。
宣告
歡迎轉載,但請保留文章原始出處:)
部落格園:http://www.cnblogs.com
農民伯伯: http://over140.cnblogs.com
正文
1、用動畫更新約束沒有動畫效果?
缺少 layoutIfNeeded ,事例:
UIView.animateWithDuration(0.15, animations: { () -> Void in self.heightConstraint.constant= 100 self.view.layoutIfNeeded() // 這行不能少 })
2、處理單擊和雙擊衝突
singleTapRecognizer.requireGestureRecognizerToFail( doubleTapRecognizer )
但是有一個問題,單擊響應會變慢,所以最好更改設計方案。
3、獲取 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 } }
4、自定義分享(分享到 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 發起分享。
5、IQKeyboardManager 禁止某個 UITextField 的工具欄
針對 ViewController 級別禁用工具欄:IQKeyboardManager.sharedManager().disableToolbarInViewControllerClass ,如果這個 UITextField 直接 add 到 window 上的這個方法就不管用了,可以直接設定 inputAccessoryView = UIView() 即可。
6、AFNetworking 3.0 輸出 Log
let networkLogger = AFNetworkActivityLogger.sharedLogger() networkLogger.startLogging() let console = AFNetworkActivityConsoleLogger() console.level = AFHTTPRequestLoggerLevel.AFLoggerLevelDebug networkLogger.addLogger(console)
7、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 這行崩潰。
系列