Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import UIKit
- class BrosweingImageViewController: UIViewController, UIScrollViewDelegate{
- @IBOutlet var backgroundView: UIView!
- @IBOutlet weak var productScrollView: UIScrollView!
- var productImages = Array<UIImage>()
- var singleImgView: UIImageView!
- var currentPageIndex: Int = 0
- var imgViewArray = Array<UIImageView>()
- override func viewDidLoad() {
- super.viewDidLoad()
- self.productScrollView.delegate = self
- self.productScrollView.isPagingEnabled = true
- self.productScrollView.bounces = false
- self.productScrollView.bouncesZoom = false
- self.productScrollView.scrollsToTop = false
- self.productScrollView.maximumZoomScale = 2.5
- self.productScrollView.minimumZoomScale = 1.0
- self.productScrollView.zoomScale = 1.0
- self.productImages = [UIImage(named: "pic_colorful_officeSolutions")!, UIImage(named: "pic_colorful_networking")!, UIImage(named: "pic_colorful_homeTools")!]
- self.productScrollView.contentSize.width = productScrollView.frame.width * CGFloat(self.productImages.count)
- for i in 0 ..< 3 {
- singleImgView = UIImageView(frame: CGRect(x: CGFloat(i) * self.productScrollView.frame.width, y: 0, width: productScrollView.frame.size.width, height: productScrollView.frame.size.height))
- singleImgView.image = productImages[i]
- singleImgView.isUserInteractionEnabled = false
- imgViewArray.append(singleImgView)
- productScrollView.addSubview(singleImgView)
- }
- // self.productScrollView.contentSize.width = productScrollView.frame.width * CGFloat(0)
- // singleImgView = UIImageView(frame: CGRect(x: CGFloat(0) * self.productScrollView.frame.width, y: 0, width: productScrollView.frame.size.width, height: productScrollView.frame.size.height))
- // singleImgView.image = productImages[0]
- // singleImgView.isUserInteractionEnabled = false
- // self.productScrollView.addSubview(singleImgView)
- setupGestureRecognizer()
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
- // MARK : - Private Method
- func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
- //計算出目前滑動的頁數
- let currentPageNumber = Int(round(productScrollView.contentOffset.x / productScrollView.frame.size.width))
- print("***",currentPageNumber)
- //設定pageControl顯示的頁數
- self.currentPageIndex = currentPageNumber
- }
- // MARK : - Setup Gestures
- func setupGestureRecognizer() {
- //init Tap Gesture
- let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTapGesture(_:)))
- tapGesture.numberOfTapsRequired = 2
- self.productScrollView.addGestureRecognizer(tapGesture)
- //init Pan Gesture
- let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture(_:)))
- panGestureRecognizer.minimumNumberOfTouches = 1
- panGestureRecognizer.maximumNumberOfTouches = 1
- self.backgroundView.addGestureRecognizer(panGestureRecognizer)
- }
- func handleDoubleTapGesture(_ recognizer: UITapGestureRecognizer) {
- if (self.productScrollView.zoomScale > self.productScrollView.minimumZoomScale) {
- self.productScrollView.setZoomScale(self.productScrollView.minimumZoomScale, animated: true)
- } else {
- self.productScrollView.setZoomScale(self.productScrollView.maximumZoomScale, animated: true)
- }
- }
- public func viewForZooming(in scrollView: UIScrollView) -> UIView?
- {
- // return self.imgViewArray[currentPageIndex]
- // return self.productScrollView.subviews[currentPageIndex]
- return singleImgView
- }
- func handlePanGesture(_ sender: UIPanGestureRecognizer) {
- if let direction = sender.direction {
- if direction.isVertical {
- // pan is vertical
- self.dismiss(animated: true, completion: {
- let vc = self.storyboard?.instantiateViewController(withIdentifier: "ProductViewController")
- self.present(vc!, animated: true, completion: nil)
- })
- }
- }
- }
- }
- public enum PanDirection: Int {
- case up, down, left, right
- public var isVertical: Bool { return [.up, .down].contains(self) }
- public var isHorizontal: Bool { return !isVertical }
- }
- public extension UIPanGestureRecognizer {
- public var direction: PanDirection? {
- let velocity = self.velocity(in: view)
- let isVertical = fabs(velocity.y) > fabs(velocity.x)
- switch (isVertical, velocity.x, velocity.y) {
- case (true, _, let y) where y < 0: return .up
- case (true, _, let y) where y > 0: return .down
- case (false, let x, _) where x > 0: return .right
- case (false, let x, _) where x < 0: return .left
- default: return nil
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement