FPSLabel.swift 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //
  2. // FPSLabel.swift
  3. // BingHaoBang
  4. //
  5. // Created by zhangjidong on 16/3/31.
  6. // Copyright © 2016年 Zjdboy. All rights reserved.
  7. //
  8. import UIKit
  9. class FPSLabel: UILabel {
  10. private var _link :CADisplayLink?
  11. private var _count:Int = 0
  12. private var _lastTime:NSTimeInterval = 0
  13. private let _defaultSize = CGSizeMake(55, 20);
  14. override init(frame: CGRect) {
  15. var targetFrame = frame
  16. if frame.size.width == 0 && frame.size.height == 0{
  17. targetFrame.size = _defaultSize
  18. }
  19. super.init(frame: targetFrame)
  20. self.layer.cornerRadius = 5
  21. self.clipsToBounds = true
  22. self.textAlignment = .Center
  23. self.userInteractionEnabled = false
  24. self.textColor = UIColor.whiteColor()
  25. self.backgroundColor = UIColor(white: 0, alpha: 0.7)
  26. self.font = UIFont(name: "Menlo", size: 14)
  27. weak var weakSelf = self
  28. _link = CADisplayLink(target: weakSelf!, selector:#selector(FPSLabel.tick(_:)) );
  29. _link!.addToRunLoop(NSRunLoop .mainRunLoop(), forMode:NSRunLoopCommonModes)
  30. }
  31. required init?(coder aDecoder: NSCoder) {
  32. super.init(coder: aDecoder)
  33. }
  34. func tick(link:CADisplayLink) {
  35. if _lastTime == 0 {
  36. _lastTime = link.timestamp
  37. return
  38. }
  39. _count += 1
  40. let delta = link.timestamp - _lastTime
  41. if delta < 1 {
  42. return
  43. }
  44. _lastTime = link.timestamp
  45. let fps = Double(_count) / delta
  46. _count = 0
  47. let progress = fps / 60.0;
  48. self.textColor = UIColor(hue: CGFloat(0.27 * ( progress - 0.2 )) , saturation: 1, brightness: 0.9, alpha: 1)
  49. self.text = "\(Int(fps+0.5))FPS"
  50. }
  51. }