如何更改 UIImageView 中 UIImage 的位置

How do I alter the position of a UIImage inside a UIImageView

我有一个名为 imageUIImage 我想更改它在 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)

简答:你不知道。

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

编辑:

这实际上不是编码问题 - 它更像是一个 Interface Builder 问题。您需要设置滚动视图。 滚动视图是一种可让您查看较大视图的一部分的视图。

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

以下是您的设置方式。

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

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

现在您有一个滚动视图,它足以容纳 300x300 点图像,顶部和底部有 20 点总白色 space。

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

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

最后一步是设置滚动视图的内容大小。通常你只需将滚动视图的内容大小设置为它的内容视图的大小。您可以通过将这段代码添加到视图控制器的 viewDidLoad:

(假设您已将插座连接到名为 theScrollView 的滚动视图)

//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;

也可以设置滚动视图的内容大小而无需任何代码。您将使用 IB(Interface Builder)的一项功能,称为“用户定义的运行时属性”。以下是您的操作方法:(如果您使用此方法,请不要将上面的代码添加到 viewDidLoad

Select IB 中的滚动视图。 按 command-option 3 到 select “身份检查器”。 在标题为“用户定义的运行时属性”的部分中,点击左侧的加号。将 Key Path 编辑为“contentSize”(除“Size”中的“S”外均为小写。这非常重要。)按 enter 键更改密钥路径。然后点击“类型”列和 select“尺寸”。值字段将显示“{0,0}”。输入您想要的内容大小:(上例中的“{300,340}”。)

它的作用是告诉 IB“在运行时,在 selected object(滚动视图)中寻找名为“contentSize”的 属性。设置 属性 到 CGSize 类型的指定值。

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

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

默认情况下,滚动视图让您在拖动内容时“过度”,然后在您放手时弹回原位。您可以通过取消选中 IB“属性检查器”(命令选项 4)中的“弹跳”复选框来关闭该功能

你不应该那样做。但如果你愿意,你可以玩 anchorPoint 属性 的 UImageView 支持层。 link

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