InstaProgressView
这是一个很酷且有用的控件,看起来像 Snapchat、Instagram 或其他具有进度条(加载白色条带)的应用。
以下是关于实现细节的详细阅读以及示例项目的截图
🥳
如何使用这个酷孩子?非常简单!首先,在您的 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 - 这是段数
当进度视图添加到视图时,请调用
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")
}
}