【Swift】iOS開發筆記(二)

 

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

 

系列

  【Swift】iOS開發筆記(一)

相關文章
相關標籤/搜索