Advertisement
inf926k

Untitled

Jan 16th, 2018
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 3.00 KB | None | 0 0
  1. class SuperellipseFpsTestController: UIViewController {
  2.    
  3.     let maskImage = #imageLiteral(resourceName: "superellipse_mask").resizeIfBigger(size: CGSize.init(width: 60, height: 60), opaque: false).cgImage!
  4.    
  5.     var imageIndex = 0
  6.     let images: [UIImage] = [#imageLiteral(resourceName: "iv1"), #imageLiteral(resourceName: "iv3"), #imageLiteral(resourceName: "iv4")]
  7.     func fetchNextImage() -> UIImage {
  8.         imageIndex += randomInRange(1, images.count)
  9.         imageIndex %= images.count
  10.         return images[imageIndex]
  11.     }
  12.    
  13.     var timer: Timer!
  14.    
  15.     override func viewDidLoad() {
  16.         super.viewDidLoad()
  17.         view.backgroundColor = .lightGray
  18. //      timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerDidTick), userInfo: nil, repeats: true)
  19.     }
  20.    
  21.     func animateChanges() {
  22.         UIView.animate(withDuration: 0.6, animations: {
  23.             self.installImages()
  24.         }) { [weak self] _ in
  25.             self?.animateChanges()
  26.         }
  27.     }
  28.    
  29. //  @objc func timerDidTick() {
  30. //      installImages()
  31. //  }
  32.    
  33.     enum Mode {
  34.         case bezier
  35.         case image
  36.     }
  37.    
  38.     let mode = Mode.bezier
  39.    
  40.     override func viewDidAppear(_ animated: Bool) {
  41.         super.viewDidAppear(animated)
  42.         for _ in 0 ..< 60 {
  43.             let iv = UIImageView()
  44.             iv.contentMode = .scaleToFill
  45.             imageViews.append(iv)
  46.             view.addSubview(iv)
  47.            
  48. //          installBezierMask(to: iv)
  49. //          installImageMask(to: iv)
  50.         }
  51.         animateChanges()
  52.     }
  53.    
  54.     func installBezierMask(to imageView: UIImageView) {
  55.         imageView.useSuperellipseMask = true
  56.     }
  57.    
  58.     func installImageMask(to imageView: UIImageView) {
  59.         let maskLayer = CALayer()
  60.         maskLayer.contents = maskImage
  61.         imageView.layer.mask = maskLayer
  62.     }
  63.    
  64.     var imageViewFrame: CGRect {
  65.         let width = CGFloat(60) // min(CGFloat(randomInRange(60, Int(view.frame.width / 2))), 120)
  66.         let height = width
  67.         let x = CGFloat(randomInRange(0, Int(view.frame.width - width)))
  68.         let y = CGFloat(randomInRange(0, Int(view.frame.height - height)))
  69.         return CGRect(x: x, y: y, width: width, height: height)
  70.     }
  71.    
  72.     var imageViews = [UIImageView]()
  73.    
  74.     func installImages() {
  75.         for imageView in imageViews {
  76.             imageView.frame = self.imageViewFrame
  77.             imageView.image = fetchNextImage()
  78.            
  79.             switch mode {
  80.             case .bezier:
  81.                 imageView.useSuperellipseMask = false
  82.                 installBezierMask(to: imageView)
  83.             case .image:
  84.                 imageView.layer.mask = nil
  85.                 installImageMask(to: imageView)
  86.                 imageView.layer.mask?.frame = imageView.bounds
  87.             }
  88.         }
  89.     }
  90.    
  91.     func randomInRange(_ lo: Int, _ hi : Int) -> Int {
  92.         return lo + Int(arc4random_uniform(UInt32(hi - lo + 1)))
  93.     }
  94.    
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement