InstaProgressView 1.0.4

InstaProgressView 1.0.4

Ed Siniakov 维护。



  • Ed

InstaProgressView

这是一个很酷且有用的控件,看起来像 Snapchat、Instagram 或其他具有进度条(加载白色条带)的应用。

以下是关于实现细节的详细阅读以及示例项目的截图🧐

Image of animation

如何使用这个酷孩子?非常简单!🥳

首先,在您的 podfile 中添加一个新的 pod。别忘了运行 pod install 或 pod update😏

pod 'InstaProgressView'

然后只需在控制器中导入框架。

import InstaProgressView

不幸的是,这还没有结束。您还需要添加一些代码🤓

在您的 ViewController 中初始化 InstaProgressView。您需要类似于以下内容。

let progressView = InstaProgressView(progressTintColor: .white, trackTintColor: UIColor.white.withAlphaComponent(0.5), segmentsCount: 5, spaceBetweenSegments: 8, duration: 10)

progressTintColor - 顶部颜色,trackTintColor - 进度视图底部颜色,segmentsCount - 这是段数😄, spaceBetweenSegments - 这是 segments 之间的空间😄, 和 duration - 这是控制中一个进度视图的加载时间。

当进度视图添加到视图时,请调用

progressView.startAnimation()

通常您需要一个在用户按住屏幕时暂停动画,并在手指抬起时继续动画。

progressView.pauseAnimation()
progressView.continueAnimation()

顺便说一句,您可能需要一个通过向左或向右滑动显示屏幕上的下一个信息(例如 Instagram 中的图像或视频)。

progressView.skip()
progressView.back()

当然,不要忘记处理下一个、跳过、后退或加载结束的代理。

progressView.delegate = self

您可以使用扩展来处理所需的代理方法。

extension ViewController: InstaProgressViewDelegate {
    func instaProgressViewChangedIndex(index: Int) {
        // here you can show new image or video in controller
        // something like that
        //imageView.image = UIImage(named: imageNames[index])
    }

    func instaProgressViewFinished() {
        print("Finished")
        // Here you can hadle end loading of last element in control
    }
}

这就结束了!享受这个有用的控件。

如果你仍然不理解这个示例,特别为你准备🤪

//
//  ViewController.swift
//  Created by Eduard Sinyakov on 11/19/20.
//

import UIKit
import InstaProgressView

class ViewController: UIViewController {
    let imageView: UIImageView = {
        let imageView = UIImageView()
        imageView.contentMode = .scaleAspectFill
        return imageView
    }()
    // image can gets from back-end or dont forget add images in Assets.xcassets
    // and just add image names in array
    let imageNames = ["0", "1", "2", "3", "4"]

    let progressView = InstaProgressView(progressTintColor: .white, trackTintColor: UIColor.white.withAlphaComponent(0.5), segmentsCount: 5, spaceBetweenSegments: 8, duration: 10)

    override func viewDidLoad() {
        super.viewDidLoad()
        setupGesturesRecognizers()
        setupImageView()

    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        progressViewSetup()
    }

    private func setupImageView() {
        view.addSubview(imageView)
        imageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true
        imageView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0).isActive = true
        imageView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0).isActive = true
        imageView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: 0).isActive = true
        imageView.translatesAutoresizingMaskIntoConstraints = false
    }

    private func progressViewSetup() {
        view.backgroundColor = .black
        imageView.addSubview(progressView)
        progressView.delegate = self
        progressView.topAnchor.constraint(equalTo: imageView.safeAreaLayoutGuide.topAnchor, constant: 20).isActive = true
        progressView.leadingAnchor.constraint(equalTo: imageView.safeAreaLayoutGuide.leadingAnchor, constant: 10).isActive = true
        progressView.trailingAnchor.constraint(equalTo: imageView.safeAreaLayoutGuide.trailingAnchor, constant: -10).isActive = true
        progressView.heightAnchor.constraint(equalToConstant: 6).isActive = true
        progressView.translatesAutoresizingMaskIntoConstraints = false

        progressView.startAnimation()

    }

    private func setupGesturesRecognizers() {
        let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPressed))
        view.addGestureRecognizer(longPressRecognizer)

        let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
        swipeLeft.direction = .left
        view.addGestureRecognizer(swipeLeft)

        let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
        swipeRight.direction = .right
        view.addGestureRecognizer(swipeRight)
    }

    @objc private func handleGesture(gesture: UISwipeGestureRecognizer) {
        if gesture.direction == .right {
            progressView.back()
        } else if gesture.direction == .left {
            progressView.skip()
        }
    }

    @objc private func longPressed(sender: UILongPressGestureRecognizer) {
        if sender.state == .began {
            print("pause")
            progressView.pauseAnimation()
        }

        if sender.state == .ended {
            print("continueLoading")
            progressView.continueAnimation()
        }
    }
}

extension ViewController: InstaProgressViewDelegate {
    func instaProgressViewChangedIndex(index: Int) {
        imageView.image = UIImage(named: imageNames[index])
    }

    func instaProgressViewFinished() {
        print("Finished")
    }
}