我该如何改变UIImageView中UIImage的位置?

5

我有一个名为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)
2个回答

9
简短回答:你不需要这么做。
你需要将图像视图作为另一个视图的子视图添加。最简单的方法是将图像视图放置在滚动视图中,并限制它只能向下轻微滚动。然后你可以使用零代码实现滚动。
编辑:
这不是一个编码问题,更多的是一个界面构建器问题。你需要设置一个滚动视图。 滚动视图是一种允许你查看更大视图部分的视图。
你可以把滚动视图想象成一个带有矩形孔的纸片。你可以在它下面放一张更大的纸片(即滚动视图的内容视图),并且可以通过移动更大的纸片以查看孔上的不同部分。
接下来是如何设置它的步骤:
将滚动视图拖到你的视图控制器中。调整大小并添加约束来定位它的位置。如果你想要的图像视图大小为300x300点,并且想要将其向上或向下拖动20个点,则将滚动视图增加20个点。 (w: 300, h: 320)
选择滚动视图内部的视图,并将其宽度设置为与滚动视图相同的宽度,但比滚动视图高20个点。(w: 300, h: 340) 添加约束以锁定其高度和宽度。
现在你有一个足够大的滚动视图,可以放置一个300x300点的图像,上下各留出20个点的空白。
你已经创建了一个比它大20个点的内容视图,因此它可以在滚动视图中上下移动20个点。
将300x300点的图像视图拖到滚动视图内部视图中,分配一个图像,并添加约束以锁定其大小并在其父视图中水平和垂直居中。
最后一步是设置滚动视图的内容大小。通常情况下,你只需将滚动视图的内容大小设置为其内容视图的大小。你可以通过在视图控制器的viewDidLoad中添加以下代码来实现:
(假设你已经连接了一个名为theScrollView的滚动视图的outlet)
//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)的“User Defined Runtime Attributes”功能。以下是操作步骤:(如果使用此方法,则不要将上述代码添加到viewDidLoad中)
1. 在IB中选择滚动视图。 2. 按下命令选项3选择“identity inspector”。 3. 在“User Defined Runtime Attributes”部分,点击左侧加号。将“Key Path”编辑为“contentSize”(除“Size”中的“S”外,全部小写字母。这非常重要)。按Enter以更改键路径。然后点击“type”列并选择“size”。值字段将显示“{0,0}”。输入所需的内容大小:(例如上面的“{300,340}”)。 4. 这样做的效果告诉IB:“在运行时,在所选对象(滚动视图)中查找名为“contentSize”的属性。将该属性设置为指定的CGSize类型值。 5. 完成后,您的IB“identity inspector”应如下所示:
请注意,如果在使用“User Defined Runtime Attributes”时获取密钥名称错误,则在显示该视图控制器时应用程序会崩溃,并显示非常神秘的消息。
默认情况下,滚动视图允许您在拖动其内容时“超出限制”,然后在释放时弹回原位。您可以通过取消IB“Attributes Inspector”(命令选项4)中的“Bounce”复选框来关闭该功能。

好的,谢谢。您能否用代码详细解释一下,以便我更好地理解? - Henry Brown
是的,谢谢@Duncan。我做过类似的事情,但是没有使用滚动视图,而是使用了UIView。有点复杂,但是你的答案帮助我开阔了思路。再次感谢。 - Henry Brown
当然,您可以使用常规视图,添加平移手势识别器和一堆自定义代码,但我概述的方法完全不需要任何代码。 - Duncan C
Duncan,明确一下。我的滚动视图的高度(在我的示例中,我正在处理一个长表单)应该设置为等于或大于容纳所有表单控件的内部视图的高度吗? - WBuck

0

你不应该这样做。但如果你想的话,可以玩一下UIImageView的后备层的anchorPoint属性。链接

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接