小BUG、問題吵取、總結(jié)

6月24日
  1. 改變狀態(tài)欄文字顏色脯倒,即時(shí)間盔憨、電池等的顏色:
首先郁岩, 在 plist 文件中添加  View controller-based status bar appearance 问慎,并將其設(shè)置為 NO 。
 然后笼恰, 在需要修改的頁面的 `super.viewDidLoad()` 下面添加 UIApplication.sharedApplication().statusBarStyle = .LightContent  即可歇终。
?? 注意评凝,這個(gè)操作會(huì)改變前后頁的文字顏色。如果不同的頁面不同展示宜肉,那么就改變 `style` 的值谬返。
6月27日
  1. 當(dāng)我們使用定位服務(wù)的時(shí)候日杈,發(fā)現(xiàn) CLLocationManagerDelegate 方法不執(zhí)行翰蠢,是因?yàn)槲覀儧]有授權(quán)定位。解決辦法(注意廷支,這兩個(gè)字段在plist文件中中是找不到的恋拍,需要手動(dòng)輸入):
首先在 info.plist里加入對(duì)應(yīng)的缺省字段 ,值設(shè)置為YES(前臺(tái)定位寫上邊字段僵娃,前后臺(tái)定位寫下邊字段)         
NSLocationWhenInUseDescription             //  使用時(shí)獲取定位
NSLocationWhenInUseUsageDescription        // 允許在前臺(tái)獲取GPS的描述 
NSLocationAlwaysUsageDescription           // 允許在前默怨、后臺(tái)獲取GPS的描述 

說明一下上面三個(gè)字段使用時(shí)的區(qū)別:NSLocationWhenInUseDescription 是最常用的一個(gè)設(shè)置,此時(shí)將字段 NSLocationAlwaysUsageDescription 設(shè)置為 String 類型骤素,并加入描述文字,首次使用APP時(shí)痕檬,在使用定位的彈框提示中,下面小字顯示自己的描述文字谆棺。NSLocationWhenInUseUsageDescription 字段設(shè)置為 Bool 值時(shí),使用程序期間將程序后臺(tái)運(yùn)行罕袋,會(huì)再手機(jī)最上方提示自己的APP正在使用定位服務(wù)改淑。NSLocationAlwaysUsageDescription 表示APP使用使用定位服務(wù)浴讯。這個(gè)在上傳到AppStore審核時(shí)榆纽,必須要說明程序在哪里使用了實(shí)時(shí)定位服務(wù),并且要說明實(shí)時(shí)定位會(huì)損耗電池壽命衣屏。

7月6日
  1. 獲取本地視頻的指定時(shí)間截圖

首先,獲取安裝路徑下 Documents 文件夾路徑一睁,并且遍歷所有文件,獲取完整路徑:

/**
     獲取全部視頻了路徑
     - returns: 路徑數(shù)組
     */
    func getAllVideoPaths() -> [String] {
        var pathArray = [String]()
        //  Documents 文件夾
        let pathFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
        //  文件夾路徑
        let pathString = pathFolder[0] as String
        //  拼接獲取每一個(gè)文件的完整路徑
        if let lists =  try? NSFileManager.defaultManager().contentsOfDirectoryAtPath(pathString) {
            for item in lists {
                pathArray.append(pathString + "/" + item)
            }
        }
        return pathArray
    }

然后根據(jù)路徑獲取封面:

  //  通過文件路徑獲取截圖:
    func getVideoImage(videoUrl: NSURL) -> UIImage? {
        //  獲取截圖
        let videoAsset = AVURLAsset(URL: videoUrl)
        let cmTime = CMTime(seconds: 1, preferredTimescale: 10)
        let imageGenerator = AVAssetImageGenerator(asset: videoAsset)
        if let cgImage = try? imageGenerator.copyCGImageAtTime(cmTime, actualTime: nil) {
            let image = UIImage(CGImage: cgImage)
            return image
        } else {
            print("獲取縮略圖失敗")
        }
        return nil
    }

刪除指定路徑下的文件方法:

        NSFileManager.defaultManager().removeItemAtURL(<#T##URL: NSURL##NSURL#>)
        NSFileManager.defaultManager().removeItemAtPath(<#T##path: String##String#>)
7月11日
  1. 獲取設(shè)備外網(wǎng)IP的方法:

使用樂視的視頻上傳功能用到了這個(gè)知識(shí)點(diǎn):

  /**
   獲取設(shè)備外網(wǎng)IP地址
   
   - returns: 地址
   */
  func getDeviceIP() -> NSDictionary? {
      
      let ipUrl = NSURL.init(string: "http://pv.sohu.com/cityjson?ie=utf-8")
      if var needIP = try? String.init(contentsOfURL: ipUrl!, encoding: NSUTF8StringEncoding) {
          //  判斷字符串是否是所需數(shù)據(jù)
          if needIP.hasPrefix("var returnCitySN = ") {
              //  對(duì)字符串進(jìn)行處理佃却,然后進(jìn)行Json解析者吁,刪除字符串多與字符
              for _ in 0 ..< 19 {
                  needIP.removeAtIndex(needIP.startIndex)
              }
              
              //  截取字符串
              let nowIP = needIP.substringToIndex(needIP.startIndex.advancedBy(needIP.characters.count - 1))
              //  將字符串換成二進(jìn)制進(jìn)行Json解析
              let data = nowIP.dataUsingEncoding(NSUTF8StringEncoding)
              
              if let needData = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) {
                  return needData as? NSDictionary
              } else {
                  print("解析外網(wǎng)地址失敗")
                  return nil
              }
          }
      } else {
          print("獲取外網(wǎng)地址失敗")
      }
      
      return nil
  }
7月12日
  1. 計(jì)算指定路徑下文件的大小。

計(jì)算沙盒內(nèi)部文件大小時(shí)用到這個(gè)方法:

        //  文件大小饲帅,self.videoUrl 是文件路徑
        do {
            let file = try NSFileManager.defaultManager().attributesOfItemAtPath(self.videoUrl!)
            let size = file["NSFileSize"] as! CGFloat
            let fileSize: CGFloat = size / CGFloat(1024) / CGFloat(1024)
            //  保留兩位小數(shù)
            print("文件大懈吹省: \(String(format: "%0.2f",fileSize)) M")
            
        } catch let error as NSError {
            print("error = \(error)")
        }
7月19日
  1. 將標(biāo)準(zhǔn)時(shí)間轉(zhuǎn)換為時(shí)間串。

2016-07-18 12:26:16 +0000 -> 20160718122616 , 在用樂視SDK上傳本地視頻的時(shí)候用到了這個(gè)知識(shí)點(diǎn)灶泵。需要注意的是標(biāo)準(zhǔn)時(shí)間會(huì)比目前時(shí)間提前8小時(shí)染坯,這里也做了簡(jiǎn)單的轉(zhuǎn)化:

    /**
     將日期轉(zhuǎn)換成年月日時(shí)分秒的樣式,用于存儲(chǔ)本地視頻

     - parameter originDate: 需要轉(zhuǎn)換的原始時(shí)間
     
     - returns: 成品
     */
    func transformDateToTimeString(originDate: NSDate) -> String {
        
        //  NSDate() 會(huì)比現(xiàn)在的時(shí)間提前8小時(shí)丘逸,轉(zhuǎn)換為當(dāng)前時(shí)間
        let zone = NSTimeZone.systemTimeZone()
        let interval = zone.secondsFromGMTForDate(originDate)
        let localDate = originDate.dateByAddingTimeInterval(Double(interval))
        
        //  將日期轉(zhuǎn)化為字符串       "2016-07-18 12:26:16 +0000\n"
        var dateArray = String(localDate).componentsSeparatedByString(" ")
        let first = dateArray.first?.componentsSeparatedByString("-")
        let second = dateArray[1].componentsSeparatedByString(":")
        let firArr: NSMutableArray = NSMutableArray(array: first!)
        let secArr: NSMutableArray = NSMutableArray(array: second)
        let name = firArr.componentsJoinedByString("") + secArr.componentsJoinedByString("")
        return name
        
    }
  1. 將總秒數(shù)轉(zhuǎn)換為播放時(shí)間单鹿。

30 -> 00:00:30 。這里比較有價(jià)值的就是字符的格式化輸出這個(gè)點(diǎn)深纲。

  /**
   將秒數(shù)轉(zhuǎn)化為 00:00:00 的時(shí)間樣式
   
   - parameter totalSecond: 待轉(zhuǎn)換秒數(shù)
   
   - returns: 時(shí)間
   */
  func mTransformSecondsToPlayTime(totalSecond: Int?) -> String {
      if let seconds = totalSecond {
          let hour = seconds / 3600
          let mintues = (seconds % 3600) / 60
          let second = seconds % 60
          
          return  String(format: "%02d",hour) + ":" +
                  String(format: "%02d", mintues) + ":" +
                  String(format: "%02d", second)
      } else {
          return "88:88:88"
      }
  }
8月3日

轉(zhuǎn)換十六進(jìn)制顏色值:
Objective-C

#define HEXCOLOR(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

Swift:

//  十六進(jìn)制顏色轉(zhuǎn)換
func HEXCOLOR(rgbValue: Int) -> UIColor {
    return UIColor.init(red: CGFloat(Double(((rgbValue & 0xFF0000) >> 16)) / 255.0), green: CGFloat(Double(((rgbValue & 0xFF00) >> 8)) / 255.0), blue: CGFloat(Double((rgbValue & 0xFF)) / 255.0), alpha: 1.0)
}
8月8日
  1. 雷達(dá)動(dòng)畫核心代碼仲锄,最適合用在地圖中:

![效果圖]](http://upload-images.jianshu.io/upload_images/1910830-a1d6abdfde26943c.gif?imageMogr2/auto-orient/strip)

  // 調(diào)制顏色
  struct Contants {
      struct ColorPalette {
          static let green = UIColor(red:0.00, green:0.87, blue:0.71, alpha:1.0)
      }
  }
  /**
   核心動(dòng)畫
   
   - parameter beginTime: 啟動(dòng)時(shí)間間隔
   */
  func sonar(beginTime: CFTimeInterval) {
      let circlePath1 = UIBezierPath(arcCenter: self.view.center, radius: CGFloat(3), startAngle: CGFloat(0), endAngle: CGFloat(M_PI * 2), clockwise: true)
      
      let circlePath2 = UIBezierPath(arcCenter: self.view.center, radius: CGFloat(80), startAngle: CGFloat(0), endAngle: CGFloat(M_PI * 2), clockwise: true)
      
      let shapeLayer = CAShapeLayer()
      shapeLayer.strokeColor = Contants.ColorPalette.green.CGColor        //  邊緣顏色
      shapeLayer.fillColor = Contants.ColorPalette.green.CGColor
      shapeLayer.path = circlePath1.CGPath
      self.view.layer.addSublayer(shapeLayer)
      
      let pathAnimation = CABasicAnimation(keyPath: "path")
      pathAnimation.fromValue = circlePath1.CGPath
      pathAnimation.toValue = circlePath2.CGPath
      
      let alphaAnimation = CABasicAnimation(keyPath: "opacity")
      alphaAnimation.fromValue = 0.8
      alphaAnimation.toValue = 0.0
      
      let animationGroup = CAAnimationGroup()
      animationGroup.beginTime = beginTime
      animationGroup.animations = [pathAnimation, alphaAnimation]
      animationGroup.duration = 2.76
      animationGroup.repeatCount = FLT_MAX
      animationGroup.delegate = self
      animationGroup.removedOnCompletion = false
      animationGroup.fillMode = kCAFillModeForwards
      
      shapeLayer.addAnimation(animationGroup, forKey: "sonar")
  }
  
  /**
   啟動(dòng)動(dòng)畫
   */
  func startAnimation() {
      sonar(CACurrentMediaTime())
      sonar(CACurrentMediaTime() + 0.92)
      sonar(CACurrentMediaTime() + 1.84)
  }
8月23日

ijkplayerDemo 編譯方法

8月24日
  1. 隱藏 UITabBar 的灰色線條:
        let tabBar = UITabBar.appearance()
        tabBar.shadowImage = UIImage()
        tabBar.backgroundImage = UIImage()
8月29日
  1. Swift 格式化輸出:

參考鏈接:SwiftTips-Log輸出

/**
自定義Log輸出

- parameter message: 輸出信息
- parameter file:    輸出方法所在文件名
- parameter method:  所在方法名
- parameter line:    所在行數(shù)
*/
public func printLog<T>(message: T,
                    file: String = #file,
                    method: String = #function,
                    line: Int = #line) {
   
   #if DEBUG
   print("????\((file as NSString).lastPathComponent)[\(line)] \(method)????: \(message)")
   #endif
}

在 Swift 中,編譯器為我們準(zhǔn)備了幾個(gè)很有意義的編譯符號(hào)湃鹊,分別是:

符號(hào) 類型 描述
#file String 包含這個(gè)符號(hào)的文件的路徑
#line Int 符號(hào)出現(xiàn)處的行數(shù)
#column Int 符號(hào)出現(xiàn)處的列數(shù)
#function String 包含這個(gè)符號(hào)的方法名字

這樣還不足夠儒喊,還要配置 DEBUG 這個(gè)宏,否則不能正確輸出:

配置DEBUG宏定義
2017年3月7日

1.設(shè)置微信為白名單:
info.plist 添加代碼:

<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末币呵,一起剝皮案震驚了整個(gè)濱河市怀愧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌余赢,老刑警劉巖芯义,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異妻柒,居然都是意外死亡扛拨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門举塔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绑警,“玉大人,你說我怎么就攤上這事央渣〖坪校” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵芽丹,是天一觀的道長(zhǎng)北启。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么暖庄? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮楼肪,結(jié)果婚禮上培廓,老公的妹妹穿的比我還像新娘。我一直安慰自己春叫,他們只是感情好肩钠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暂殖,像睡著了一般价匠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呛每,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天踩窖,我揣著相機(jī)與錄音,去河邊找鬼晨横。 笑死洋腮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的手形。 我是一名探鬼主播啥供,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼库糠!你這毒婦竟也來了伙狐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤瞬欧,失蹤者是張志新(化名)和其女友劉穎贷屎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艘虎,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豫尽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顷帖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片美旧。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖贬墩,靈堂內(nèi)的尸體忽然破棺而出榴嗅,到底是詐尸還是另有隱情,我是刑警寧澤陶舞,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布嗽测,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏唠粥。R本人自食惡果不足惜疏魏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晤愧。 院中可真熱鬧大莫,春花似錦、人聲如沸官份。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舅巷。三九已至羔味,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钠右,已是汗流浹背赋元。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留飒房,地道東北人们陆。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像情屹,于是被迫代替她去往敵國(guó)和親坪仇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容