Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SuperellipseFpsTestController: UIViewController {
- let maskImage = #imageLiteral(resourceName: "superellipse_mask").resizeIfBigger(size: CGSize.init(width: 60, height: 60), opaque: false).cgImage!
- var imageIndex = 0
- let images: [UIImage] = [#imageLiteral(resourceName: "iv1"), #imageLiteral(resourceName: "iv3"), #imageLiteral(resourceName: "iv4")]
- func fetchNextImage() -> UIImage {
- imageIndex += randomInRange(1, images.count)
- imageIndex %= images.count
- return images[imageIndex]
- }
- var timer: Timer!
- override func viewDidLoad() {
- super.viewDidLoad()
- view.backgroundColor = .lightGray
- // timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerDidTick), userInfo: nil, repeats: true)
- }
- func animateChanges() {
- UIView.animate(withDuration: 0.6, animations: {
- self.installImages()
- }) { [weak self] _ in
- self?.animateChanges()
- }
- }
- // @objc func timerDidTick() {
- // installImages()
- // }
- enum Mode {
- case bezier
- case image
- }
- let mode = Mode.bezier
- override func viewDidAppear(_ animated: Bool) {
- super.viewDidAppear(animated)
- for _ in 0 ..< 60 {
- let iv = UIImageView()
- iv.contentMode = .scaleToFill
- imageViews.append(iv)
- view.addSubview(iv)
- // installBezierMask(to: iv)
- // installImageMask(to: iv)
- }
- animateChanges()
- }
- func installBezierMask(to imageView: UIImageView) {
- imageView.useSuperellipseMask = true
- }
- func installImageMask(to imageView: UIImageView) {
- let maskLayer = CALayer()
- maskLayer.contents = maskImage
- imageView.layer.mask = maskLayer
- }
- var imageViewFrame: CGRect {
- let width = CGFloat(60) // min(CGFloat(randomInRange(60, Int(view.frame.width / 2))), 120)
- let height = width
- let x = CGFloat(randomInRange(0, Int(view.frame.width - width)))
- let y = CGFloat(randomInRange(0, Int(view.frame.height - height)))
- return CGRect(x: x, y: y, width: width, height: height)
- }
- var imageViews = [UIImageView]()
- func installImages() {
- for imageView in imageViews {
- imageView.frame = self.imageViewFrame
- imageView.image = fetchNextImage()
- switch mode {
- case .bezier:
- imageView.useSuperellipseMask = false
- installBezierMask(to: imageView)
- case .image:
- imageView.layer.mask = nil
- installImageMask(to: imageView)
- imageView.layer.mask?.frame = imageView.bounds
- }
- }
- }
- func randomInRange(_ lo: Int, _ hi : Int) -> Int {
- return lo + Int(arc4random_uniform(UInt32(hi - lo + 1)))
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement