Advertisement
Guest User

Untitled

a guest
Aug 3rd, 2017
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.21 KB | None | 0 0
  1. import UIKit
  2.  
  3. class BrosweingImageViewController: UIViewController, UIScrollViewDelegate{
  4.  
  5. @IBOutlet var backgroundView: UIView!
  6. @IBOutlet weak var productScrollView: UIScrollView!
  7.  
  8. var productImages = Array<UIImage>()
  9. var singleImgView: UIImageView!
  10. var currentPageIndex: Int = 0
  11.  
  12. var imgViewArray = Array<UIImageView>()
  13.  
  14. override func viewDidLoad() {
  15. super.viewDidLoad()
  16.  
  17. self.productScrollView.delegate = self
  18. self.productScrollView.isPagingEnabled = true
  19. self.productScrollView.bounces = false
  20. self.productScrollView.bouncesZoom = false
  21. self.productScrollView.scrollsToTop = false
  22. self.productScrollView.maximumZoomScale = 2.5
  23. self.productScrollView.minimumZoomScale = 1.0
  24. self.productScrollView.zoomScale = 1.0
  25.  
  26.  
  27. self.productImages = [UIImage(named: "pic_colorful_officeSolutions")!, UIImage(named: "pic_colorful_networking")!, UIImage(named: "pic_colorful_homeTools")!]
  28.  
  29. self.productScrollView.contentSize.width = productScrollView.frame.width * CGFloat(self.productImages.count)
  30. for i in 0 ..< 3 {
  31. singleImgView = UIImageView(frame: CGRect(x: CGFloat(i) * self.productScrollView.frame.width, y: 0, width: productScrollView.frame.size.width, height: productScrollView.frame.size.height))
  32. singleImgView.image = productImages[i]
  33. singleImgView.isUserInteractionEnabled = false
  34. imgViewArray.append(singleImgView)
  35. productScrollView.addSubview(singleImgView)
  36. }
  37.  
  38. // self.productScrollView.contentSize.width = productScrollView.frame.width * CGFloat(0)
  39. // singleImgView = UIImageView(frame: CGRect(x: CGFloat(0) * self.productScrollView.frame.width, y: 0, width: productScrollView.frame.size.width, height: productScrollView.frame.size.height))
  40. // singleImgView.image = productImages[0]
  41. // singleImgView.isUserInteractionEnabled = false
  42. // self.productScrollView.addSubview(singleImgView)
  43.  
  44. setupGestureRecognizer()
  45.  
  46. }
  47.  
  48. override func didReceiveMemoryWarning() {
  49. super.didReceiveMemoryWarning()
  50. // Dispose of any resources that can be recreated.
  51. }
  52.  
  53. // MARK : - Private Method
  54.  
  55. func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
  56. //計算出目前滑動的頁數
  57. let currentPageNumber = Int(round(productScrollView.contentOffset.x / productScrollView.frame.size.width))
  58. print("***",currentPageNumber)
  59. //設定pageControl顯示的頁數
  60. self.currentPageIndex = currentPageNumber
  61. }
  62.  
  63. // MARK : - Setup Gestures
  64.  
  65. func setupGestureRecognizer() {
  66. //init Tap Gesture
  67. let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTapGesture(_:)))
  68. tapGesture.numberOfTapsRequired = 2
  69. self.productScrollView.addGestureRecognizer(tapGesture)
  70.  
  71. //init Pan Gesture
  72. let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture(_:)))
  73. panGestureRecognizer.minimumNumberOfTouches = 1
  74. panGestureRecognizer.maximumNumberOfTouches = 1
  75. self.backgroundView.addGestureRecognizer(panGestureRecognizer)
  76. }
  77.  
  78. func handleDoubleTapGesture(_ recognizer: UITapGestureRecognizer) {
  79.  
  80. if (self.productScrollView.zoomScale > self.productScrollView.minimumZoomScale) {
  81. self.productScrollView.setZoomScale(self.productScrollView.minimumZoomScale, animated: true)
  82. } else {
  83. self.productScrollView.setZoomScale(self.productScrollView.maximumZoomScale, animated: true)
  84. }
  85. }
  86.  
  87.  
  88. public func viewForZooming(in scrollView: UIScrollView) -> UIView?
  89. {
  90. // return self.imgViewArray[currentPageIndex]
  91. // return self.productScrollView.subviews[currentPageIndex]
  92. return singleImgView
  93. }
  94.  
  95. func handlePanGesture(_ sender: UIPanGestureRecognizer) {
  96. if let direction = sender.direction {
  97. if direction.isVertical {
  98. // pan is vertical
  99. self.dismiss(animated: true, completion: {
  100. let vc = self.storyboard?.instantiateViewController(withIdentifier: "ProductViewController")
  101. self.present(vc!, animated: true, completion: nil)
  102. })
  103. }
  104. }
  105. }
  106. }
  107.  
  108. public enum PanDirection: Int {
  109. case up, down, left, right
  110. public var isVertical: Bool { return [.up, .down].contains(self) }
  111. public var isHorizontal: Bool { return !isVertical }
  112. }
  113.  
  114. public extension UIPanGestureRecognizer {
  115.  
  116. public var direction: PanDirection? {
  117. let velocity = self.velocity(in: view)
  118. let isVertical = fabs(velocity.y) > fabs(velocity.x)
  119. switch (isVertical, velocity.x, velocity.y) {
  120. case (true, _, let y) where y < 0: return .up
  121. case (true, _, let y) where y > 0: return .down
  122. case (false, let x, _) where x > 0: return .right
  123. case (false, let x, _) where x < 0: return .left
  124. default: return nil
  125. }
  126. }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement