【问题标题】:ScrollView doesn't scroll swiftScrollView 不能快速滚动
【发布时间】:2018-03-05 08:32:58
【问题描述】:

我有一种方法可以显示照片并在用户需要时将其放大。我使用了滚动视图,以便用户在放大照片时可以滚动。我的缩放工作,但它放大到左上角,我的滚动视图不会滚动到其他任何地方,即使它显示了负责滚动移动的垂直和水平条。

class ImageViewController: UIViewController, UIScrollViewDelegate {
var myscrollView: UIScrollView!

var imgView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
            myscrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
    self.view.addSubview(myscrollView)

    myscrollView.delegate = self
 //  myscrollView.scrollRectToVisible(CGRect(x: 100, y: 100, width: 1, height: 1), animated: true)

  //  myscrollView.setContentOffset(CGPoint(x: 0, y: view.frame.size.height), animated: true)
 //   myscrollView.contentSize = CGSize(width: view.frame.width, height: view.frame.height)
    print("\(myscrollView.frame.height)  \(myscrollView.frame.width)")
    //myscrollView.contentSize = CGSize(width: 1000, height: 2000)
    myscrollView.isScrollEnabled = true
    myscrollView.minimumZoomScale = 1.0
    myscrollView.maximumZoomScale = 10.0//maximum zoom scale you want
    myscrollView.zoomScale = 1.0
    myscrollView.alwaysBounceVertical = false
    myscrollView.alwaysBounceHorizontal = false
    myscrollView.showsVerticalScrollIndicator = true
    myscrollView.flashScrollIndicators()

  //  scrollView.isPagingEnabled = false
  //  self.scrollView.contentSize = self.view.frame.size * 2//or what ever size you want to set
  //  myscrollView.contentOffset = CGPointMake((myscrollView.contentSize.width-myscrollView.frame.size.width)*.5f, .0f);//scroll to center
   // myscrollView.contentOffset = CGPoint((myscrollView.contentSize.width-myscrollView.frame.size.width)*.5f, .0f)

    myscrollView.addSubview(imgView)
    //self.view.addSubview(imgView)
    imgView!.layer.cornerRadius = 11.0
    imgView.bounds = myscrollView.bounds
    //imgView!.clipsToBounds = false
    imgView.isUserInteractionEnabled = true
    imgView.heightAnchor.constraint(equalToConstant: 50).isActive = true
   // imgView.widthAnchor.constraint(equalToConstant: 50).isActive = true
    imgView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 64).isActive = true
    imgView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: 0).isActive = true
    imgView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
   // imgView.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true
    imgView.translatesAutoresizingMaskIntoConstraints = false
    myscrollView.contentSize = CGSize(width: imgView.frame.width , height: 2000)
   // myscrollView.contentSize = imgView.bounds.size

    // Do any additional setup after loading the view.
}
  //    func scrollViewDidZoom(_ scrollView: UIScrollView) {
  //        var offsetY: CGFloat!
 //        offsetY = 0;
 //        if (scrollView.zoomScale > 1){
 //            offsetY = CGFloat(scrollView.contentOffset.y);
 //        }
//        //CGPoint(x: scrollView.contentOffset.x, y: offsetY)
//        scrollView.setContentOffset(CGPoint(x: 
 // scrollView.contentOffset.x, y: offsetY), animated: true)
  //
  //       // [aScrollView setContentOffset: 
   // CGPointMake(aScrollView.contentOffset.x, offsetY)];
   //
 //    }

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return imgView
}
//    override func viewDidLayoutSubviews() {
//        myscrollView.delegate = self
//        myscrollView.contentSize = 
//CGSize(width:self.view.frame.size.width, height: 1000)
//    }
//    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
 //        return imgView
 //    }
  }

我尝试将 contentSize 手动设置为一些大值或小值,并使用 frame.width 和 height,但它们似乎都不起作用。有人可以帮忙解决我的问题吗?在此先感谢:)

【问题讨论】:

    标签: swift uiscrollview zooming


    【解决方案1】:

    只需尝试这些代码行并检查,您缺少什么-

    let screenSize: CGRect = UIScreen.main.bounds
    
    let scrollView = UIScrollView()
    
    override func viewDidLoad() {
            super.viewDidLoad()
    
    
    
            scrollView.contentSize = CGSize(width: screenSize.width, height: 1300)
            scrollView.frame = CGRect(x: 0, y: 70, width: screenSize.width, height: screenSize.height-70)
            scrollView.backgroundColor = UIColor.clear
    
            view.addSubview(scrollView)
    
    
    }
    

    【讨论】:

    • 另外,您可以检查一下,您将委托设置为 self
    【解决方案2】:

    尝试如下实现scrollViewDidZoom方法;

    func scrollViewDidZoom(_ scrollView: UIScrollView) {
    
            let offsetX = max((scrollView.bounds.size.width-scrollView.contentSize.width) * 0.5, 0.0)
            let offsetY = max((scrollView.bounds.size.height-scrollView.contentSize.height) * 0.5, 0.0)
            self.scrollView.contentInset = UIEdgeInsetsMake(offsetY, offsetX, 0, 0)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-15
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多