1. 程式人生 > >【Swift】iOS開發筆記(二)

【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 這行崩潰。

系列