2016-07-30 15 views
0

我有一個主滾動視圖,並在該主滾動視圖中我有一個具有UIImageView的子滾動視圖。我在正確放大滾動視圖時遇到問題。每當我嘗試放大圖像時,視圖都會移動,但圖像不會放大。我不知道我在做什麼錯誤?有人能幫我看看有什麼不對嗎?這是我的代碼:如何縮放圖像,當他們在多個頁面中迅速

import UIKit 

class ImageViewerViewController: UIViewController, UIScrollViewDelegate { 

    @IBOutlet weak var scrollView: UIScrollView! 

    @IBOutlet weak var pageControl: UIPageControl! 

    var tap: UITapGestureRecognizer? 

    var seguedAlbumImagePathArray=[] 
    var seguedCurrentImageIndex: Int? 

    var imageView: UIView? 
    var childScrollView: UIScrollView? 
    var imagev: UIImageView? 

    var totalPages: Int = 0 

    override func shouldAutorotate() -> Bool { 
     return false 
    } 

    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
     return UIInterfaceOrientationMask.Portrait 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     totalPages = seguedAlbumImagePathArray.count 
     view.bringSubviewToFront(pageControl) 

     tap = UITapGestureRecognizer(target: self, action: #selector(ImageViewerViewController.dismissImageViewer)) 
     scrollView.addGestureRecognizer(tap!) 
    } 

    func dismissImageViewer() { 
     UIView.animateWithDuration(0.2, animations: {() -> Void in 
      self.scrollView.alpha=0 
     }) 
     NSTimer.scheduledTimerWithTimeInterval(0.13, target: self, selector: #selector(self.dismissView), userInfo: nil, repeats: true) 
    } 

    func dismissView() { 
     self.presentingViewController?.dismissViewControllerAnimated(false, completion: { 
      let secondPresentingVC = self.presentingViewController?.presentingViewController; 
      secondPresentingVC?.dismissViewControllerAnimated(false, completion: {}) 
     }) 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     configureScrollView() 
     configurePageControl() 
    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    override func preferredStatusBarStyle() -> UIStatusBarStyle { 
     return UIStatusBarStyle.LightContent 
    } 


    // MARK: Custom method implementation 

    func configureScrollView() { 

     self.scrollView.backgroundColor = UIColor.blackColor() 

     // Enable paging. 
     scrollView.pagingEnabled = true 

     // Set the following flag values. 
     scrollView.showsHorizontalScrollIndicator = false 
     scrollView.showsVerticalScrollIndicator = false 
     scrollView.scrollsToTop = false 

     // Set the scrollview content size. 
     scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * CGFloat(totalPages), scrollView.frame.size.height) 

     // Set self as the delegate of the scrollview. 
     scrollView.delegate = self 

     // Load the ImageView view from the ImageView.xib file and configure it properly. 
     for i in 0 ..< totalPages { 
      // Load the ImageView view. 
      imageView = NSBundle.mainBundle().loadNibNamed("ImageView", owner: self, options: nil)[0] as! UIView 

      imageView!.backgroundColor = UIColor.blackColor() 
      // Set its frame and the background color. 
      imageView!.frame = CGRectMake(CGFloat(i) * scrollView.frame.size.width, scrollView.frame.origin.y, scrollView.frame.size.width, scrollView.frame.size.height) 
      //imageView.backgroundColor = sampleBGColors[i] 

      // Set the proper message to the test view's label. 
      let label = imageView!.viewWithTag(1) as! UILabel 
      label.text = "\(i + 1)/\(totalPages)" 

      childScrollView = imageView!.viewWithTag(2) as? UIScrollView 
      childScrollView?.minimumZoomScale=1.0 
      childScrollView?.maximumZoomScale=6.0 
      childScrollView?.delegate = self 

      imagev = childScrollView!.viewWithTag(3) as? UIImageView 
      view.sendSubviewToBack(imagev!) 

      if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(seguedAlbumImagePathArray[i] as! String), 
       let imageToDisplay = UIImage(data: imageData as! NSData) { 
       imagev!.image = imageToDisplay 
      } 
      else { 
       ImageLoader.sharedLoader.imageForUrl(seguedAlbumImagePathArray[i] as! String, completionHandler:{(image: UIImage?, url: String) in 
        self.imagev!.image = image 
       }) 
      } 

      var frame: CGRect = scrollView.frame 
      frame.origin.x = frame.size.width * CGFloat(seguedCurrentImageIndex!) 
      frame.origin.y = 0 
      scrollView.scrollRectToVisible(frame, animated: false) 

      scrollView.addSubview(imageView!) 
      //scrollView.setContentOffset(CGPoint, animated: true) 
      print(scrollView.contentOffset) 
     } 
    } 


    func configurePageControl() { 
     // Set the total pages to the page control. 
     pageControl.numberOfPages = totalPages 

     // Set the initial page. 
     pageControl.currentPage = seguedCurrentImageIndex! 
    } 


    // MARK: UIScrollViewDelegate method implementation 

    func scrollViewDidScroll(scrollView: UIScrollView) { 
     // Calculate the new page index depending on the content offset. 
     let currentPage = floor(scrollView.contentOffset.x/UIScreen.mainScreen().bounds.size.width); 
     //1.025 = 328/320 
     // Set the new page index to the page control. 
     pageControl.currentPage = Int(currentPage) 
    } 


    // MARK: IBAction method implementation 

    @IBAction func changePage(sender: AnyObject) { 
     // Calculate the frame that should scroll to based on the page control current page. 
     var newFrame = scrollView.frame 
     newFrame.origin.x = newFrame.size.width * CGFloat(pageControl.currentPage) 
     scrollView.scrollRectToVisible(newFrame, animated: true) 

    } 

    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? { 
     return self.imagev 
    } 
} 

回答

1

我有類似的問題,當我把scrollview下一個UIcontrolViewCOntroller。 刪除此 -

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? { 
     return self.imagev 
    } 

,並使用

func viewForZooming(in scrollView: UIScrollView) -> UIView? { 
     return imgview 
    } 

爲我工作。