Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 缩小时如何使UIImageView在滚动视图中居中?_Swift_Uiscrollview_Nslayoutconstraint - Fatal编程技术网

Swift 缩小时如何使UIImageView在滚动视图中居中?

Swift 缩小时如何使UIImageView在滚动视图中居中?,swift,uiscrollview,nslayoutconstraint,Swift,Uiscrollview,Nslayoutconstraint,我只是想找到一种为iPhone制作普通照片查看器的方法,但我就是无法实现缩放 myimageview = UIImageView() myimageview.translatesAutoresizingMaskIntoConstraints = false myimageview.image = UIImage(named: "1") scrollview = UIScrollView() scrollview.delegate = self sc

我只是想找到一种为iPhone制作普通照片查看器的方法,但我就是无法实现缩放

    myimageview = UIImageView()
    myimageview.translatesAutoresizingMaskIntoConstraints = false
    myimageview.image = UIImage(named: "1")
    scrollview = UIScrollView()
    scrollview.delegate = self
    scrollview.backgroundColor = UIColor.brownColor()
    scrollview.minimumZoomScale = self.view.frame.width/myimageview.image!.size.width
    scrollview.maximumZoomScale = 1.0
    scrollview.translatesAutoresizingMaskIntoConstraints = false

    self.view.addSubview(scrollview)
    scrollview.addSubview(myimageview)
    let views = ["scrollview":scrollview,"myimageview":myimageview]
    //add scrollview constraints
    self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollview]|", options: [], metrics: nil, views: views))
    self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollview]|", options: [], metrics: nil, views: views))
    scrollview.contentSize = myimageview.image!.size
    //add contentview:myimageview constraints
    let imagesize = myimageview.image!.size
    //let dd = (self.view.frame.height-imagesize.height*self.view.frame.width/imagesize.width)/2
    scrollview.addConstraint(NSLayoutConstraint(item: myimageview, attribute: .CenterY, relatedBy: .Equal, toItem: scrollview, attribute: .CenterY, multiplier: 1.0, constant: 0))
    scrollview.addConstraint(NSLayoutConstraint(item: myimageview, attribute: .Left, relatedBy: .Equal, toItem: scrollview, attribute: .Left, multiplier: 1.0, constant: 0))

    scrollview.addConstraint(NSLayoutConstraint(item: myimageview, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: myimageview.image!.size.width))
    scrollview.addConstraint(NSLayoutConstraint(item: myimageview, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: myimageview.image!.size.height))
基本上,我得到了一个scrollview和一个imageview,并将其添加到uiscrollview的子视图中。我手动设置了scrollview的contentsize,并设置了缩放。我还添加了viewForZoomingInScrollView委托函数。缩放效果很好

问题: 当缩小时,我希望图像显示在屏幕中间(UISCLVIEW),但现在它在顶部。正如你在下面看到的,图片在上面,我希望它在屏幕中间。看来中心不起作用了。没有发现任何错误。我粘贴的代码位于ViewDidLoad函数中。

好的,我发现2年后,autolayout仍然无法解决这个问题,您必须手动编写。非常伤心

var myimageview:UIImageView!
var scrollview:UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    myimageview = UIImageView()
    //myimageview.translatesAutoresizingMaskIntoConstraints = false
    myimageview.image = UIImage(named: "1")
    myimageview.frame = CGRectMake(0, 0, myimageview.image!.size.width, myimageview.image!.size.height)
    scrollview = UIScrollView()
    scrollview.delegate = self
    scrollview.backgroundColor = UIColor.brownColor()
    scrollview.minimumZoomScale = self.view.frame.width/myimageview.image!.size.width
    scrollview.maximumZoomScale = 1.0
    scrollview.translatesAutoresizingMaskIntoConstraints = false

    self.view.addSubview(scrollview)
    scrollview.addSubview(myimageview)
    let views = ["scrollview":scrollview,"myimageview":myimageview]
    //add scrollview constraints
    self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollview]|", options: [], metrics: nil, views: views))
    self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollview]|", options: [], metrics: nil, views: views))
    scrollview.contentSize = myimageview.image!.size

}

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
    // center the image as it becomes smaller than the size of the screen
    return myimageview
}

func scrollViewDidZoom(scrollView: UIScrollView) {
    let boundsSize = self.scrollview.bounds.size
    var contentsFrame = self.myimageview.frame

    if (contentsFrame.size.width < boundsSize.width) {
        contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0
    } else {
        contentsFrame.origin.x = 0.0
    }

    if (contentsFrame.size.height < boundsSize.height) {
        contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0
    } else {
        contentsFrame.origin.y = 0.0
    }

    myimageview.frame = contentsFrame;
}
var myimageview:UIImageView!
var scrollview:UIScrollView!
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后,通常从nib执行任何其他设置。
myimageview=UIImageView()
//myimageview.translatesAutoresizingMaskIntoConstraints=false
myimageview.image=UIImage(名为:“1”)
myimageview.frame=CGRectMake(0,0,myimageview.image!.size.width,myimageview.image!.size.height)
scrollview=UIScrollView()
scrollview.delegate=self
scrollview.backgroundColor=UIColor.brownColor()
scrollview.minimumZoomScale=self.view.frame.width/myimageview.image!.size.width
scrollview.maximumZoomScale=1.0
scrollview.TranslatesAutoResizezingMaskintoConstraints=false
self.view.addSubview(滚动视图)
scrollview.addSubview(myimageview)
let views=[“scrollview”:scrollview,“myimageview”:myimageview]
//添加滚动视图约束
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“H:|[scrollview]|”,选项:[],度量:零,视图:视图))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“V:|[scrollview]|”,选项:[],度量:零,视图:视图))
scrollview.contentSize=myimageview.image!.size
}
func viewForZoomingInScrollView(滚动视图:UIScrollView)->UIView?{
//当图像小于屏幕尺寸时,将图像居中
返回myimageview
}
func scrollViewDidZoom(scrollView:UIScrollView){
让boundsSize=self.scrollview.bounds.size
var contentsFrame=self.myimageview.frame
if(contentsFrame.size.width
好的,我发现2年后,autolayout仍然无法解决这个问题,您必须手动编写。非常伤心

var myimageview:UIImageView!
var scrollview:UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    myimageview = UIImageView()
    //myimageview.translatesAutoresizingMaskIntoConstraints = false
    myimageview.image = UIImage(named: "1")
    myimageview.frame = CGRectMake(0, 0, myimageview.image!.size.width, myimageview.image!.size.height)
    scrollview = UIScrollView()
    scrollview.delegate = self
    scrollview.backgroundColor = UIColor.brownColor()
    scrollview.minimumZoomScale = self.view.frame.width/myimageview.image!.size.width
    scrollview.maximumZoomScale = 1.0
    scrollview.translatesAutoresizingMaskIntoConstraints = false

    self.view.addSubview(scrollview)
    scrollview.addSubview(myimageview)
    let views = ["scrollview":scrollview,"myimageview":myimageview]
    //add scrollview constraints
    self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollview]|", options: [], metrics: nil, views: views))
    self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollview]|", options: [], metrics: nil, views: views))
    scrollview.contentSize = myimageview.image!.size

}

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
    // center the image as it becomes smaller than the size of the screen
    return myimageview
}

func scrollViewDidZoom(scrollView: UIScrollView) {
    let boundsSize = self.scrollview.bounds.size
    var contentsFrame = self.myimageview.frame

    if (contentsFrame.size.width < boundsSize.width) {
        contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0
    } else {
        contentsFrame.origin.x = 0.0
    }

    if (contentsFrame.size.height < boundsSize.height) {
        contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0
    } else {
        contentsFrame.origin.y = 0.0
    }

    myimageview.frame = contentsFrame;
}
var myimageview:UIImageView!
var scrollview:UIScrollView!
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后,通常从nib执行任何其他设置。
myimageview=UIImageView()
//myimageview.translatesAutoresizingMaskIntoConstraints=false
myimageview.image=UIImage(名为:“1”)
myimageview.frame=CGRectMake(0,0,myimageview.image!.size.width,myimageview.image!.size.height)
scrollview=UIScrollView()
scrollview.delegate=self
scrollview.backgroundColor=UIColor.brownColor()
scrollview.minimumZoomScale=self.view.frame.width/myimageview.image!.size.width
scrollview.maximumZoomScale=1.0
scrollview.TranslatesAutoResizezingMaskintoConstraints=false
self.view.addSubview(滚动视图)
scrollview.addSubview(myimageview)
let views=[“scrollview”:scrollview,“myimageview”:myimageview]
//添加滚动视图约束
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“H:|[scrollview]|”,选项:[],度量:零,视图:视图))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“V:|[scrollview]|”,选项:[],度量:零,视图:视图))
scrollview.contentSize=myimageview.image!.size
}
func viewForZoomingInScrollView(滚动视图:UIScrollView)->UIView?{
//当图像小于屏幕尺寸时,将图像居中
返回myimageview
}
func scrollViewDidZoom(scrollView:UIScrollView){
让boundsSize=self.scrollview.bounds.size
var contentsFrame=self.myimageview.frame
if(contentsFrame.size.width