如何更改UIImageView中UIImage的位置

如何更改UIImageView中UIImage的位置,image,swift,uiimageview,Image,Swift,Uiimageview,我有一个名为image的UIImage我想改变它在imageView中的位置,这样它可以稍微向下拖动,大约30px。有人能告诉我怎么做吗?这就是我要做的,但它不是正确的 var image = UIImage() var imageView = UIImageView(frame: CGRectMake(0, 0, view.frame.size.height * 0.22, view.frame.size.height * 0.22)) imageView.center = C

我有一个名为
image
UIImage
我想改变它在
imageView
中的位置,这样它可以稍微向下拖动,大约30px。有人能告诉我怎么做吗?这就是我要做的,但它不是正确的

var image = UIImage()
var imageView = UIImageView(frame: CGRectMake(0, 0, view.frame.size.height * 0.22, view.frame.size.height * 0.22))
        imageView.center = CGPointMake(self.view.center.x, view.frame.size.height * 0.414)
        imageView.image = self.image
            imageView.layer.cornerRadius = imageView.frame.size.width / 2
            imageView.layer.borderWidth = 2.0
            imageView.layer.borderColor = UIColor(red: 254.0/255, green: 216.0/255, blue: 0/255, alpha: 1.0).CGColor
            imageView.clipsToBounds = true
            imageView.layer.contentsRect = CGRectMake(0, 20, imageView.frame.size.width, imageView.frame.size.height) //This is where I have being trying to do it but no success.
        imageView.contentMode = .ScaleAspectFill
        view.addSubview(imageView)

简单回答:你没有

您要做的是将图像视图添加为另一个视图的子视图。实现这一点的简单方法是将图像视图放在一个滚动视图中,进行约束,以便它可以滚动的唯一位置是向下,并且只能轻微滚动。然后你可以用零代码实现滚动

编辑: 这不是一个真正的编码问题,而是一个界面生成器问题。您需要设置一个滚动视图。 滚动视图是允许您查看较大视图的一部分的视图

你可以把滚动视图想象成一张有矩形孔的纸。你把一张更大的纸放在它下面(滚动视图的内容视图),你可以滑动这张更大的纸,并通过这个孔查看它的不同部分

下面是您将如何设置它

将滚动视图拖到视图控制器上。调整其大小并向其添加约束,以将其定位到所需的位置。例如,如果希望图像视图的大小为300x300点,并且希望能够将其上下拖动20点,则将滚动视图的高度提高20点。(宽:300,高:320)

选择scrollview内的视图,并将其宽度设置为与scrollview相同的宽度,但比scroll视图高20点。(宽:300,高:340)。添加约束以锁定其高度和宽度

现在您有了一个足够大的滚动视图,可以显示300x300点的图像,顶部和底部总共有20点空白

您已经创建了一个比它大20点的内容视图,因此它可以在滚动视图中向上或向下滑动20点

将300x300点图像视图拖动到滚动视图内的视图中,为其指定图像,并添加约束以锁定其大小,并在其superview中水平和垂直居中

最后一步是设置滚动视图的内容大小。通常,您只需将滚动视图的内容大小设置为其内容视图的大小。您可以通过向视图控制器的viewDidLoad中添加以下代码来实现这一点:

(假设您已将一个名为
theScrollView
的插座连接到scrollview)

也可以在没有任何代码的情况下设置滚动视图的内容大小。您将使用IB(Interface Builder)的一个称为“用户定义的运行时属性”的功能。下面是如何做到这一点的:(如果使用这种方法,请不要将上面的代码添加到
viewDidLoad

在IB中选择滚动视图。 按命令选项3选择“身份检查器”。 在标题为“用户定义的运行时属性”的部分中,点击左侧的加号。将
键路径
编辑为“contentSize”(除“Size”中的“S”外,所有小写字母)。这一点非常重要。按enter键可更改键路径。然后点击“类型”列并选择“大小”。值字段将显示“{0,0}”。输入所需的内容大小:({300340}在上面的示例中)

这会告诉IB“在运行时,在所选对象(滚动视图)中查找名为“contentSize”的属性。将该属性设置为CGSize类型的指定值

完成后,您的IB“身份检查器”应如下所示:

请注意,如果您在使用“用户定义的运行时属性”时获得了错误的密钥名称,那么当您显示该视图控制器时,应用程序将崩溃,并显示一条非常神秘的消息


默认情况下,滚动视图允许您在拖动其内容时“超调”,然后在释放时反弹回原位。您可以通过取消选中IB“属性检查器”(命令选项4)中的“反弹”复选框来关闭该功能你不应该这样做。但是如果你想,你可以使用
UImageView
背景层的
anchorPoint
属性


注意:请记住,任何布局过程都可能会在以后更改此属性。

好的,谢谢,您能用一些代码对此进行详细说明,以便我更好地理解吗?是的,谢谢@Duncan。我做了一些类似的事情,只是使用了滚动视图,只是使用了UIView。有点复杂,但您的回答帮助我打开了思路。再次感谢您您可以使用常规视图、添加平移手势识别器和一组自定义代码,但我概述的方法绝对不需要任何代码。Duncan,为了清楚起见。我的滚动视图的高度是否应该(在我的示例中,我处理的是一个长表单)是否应设置为等于或大于包含所有窗体控件的内部视图的高度?
//Get the first (and only) subview of the scrollView.
let subview = theScrollView.subviews[0] as! UIView;

//Make the scroll view's contentSize the same size as the content view.
theScrollView!.contentSize = subview.bounds.size;