zoukankan      html  css  js  c++  java
  • 【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 这行崩溃。

    系列

      【Swift】iOS开发笔记(一)

  • 相关阅读:
    Java 并发工具包 java.util.concurrent 用户指南
    Java 序列化Serializable详解(附详细例子)
    Spring之FactoryBean .
    《用chsh选择shell》-linux命令五分钟系列之十二
    《vi中的替换艺术》-linux命令五分钟系列之十一
    0-1背包问题
    Java关键字final、static使用总结
    《作业控制系列》-“linux命令五分钟系列”之十
    《zip命令》-linux命令五分钟系列之九
    《bunzip2命令》-linux命令五分钟系列之八
  • 原文地址:https://www.cnblogs.com/over140/p/5197442.html
Copyright © 2011-2022 走看看