UIImageView的图片位置可以设置吗?

18

我的UIImageView显示一张较大的图片。它看起来是居中的,但我想把这个图片移动到UIImageView内部。我查看了苹果公司的MoveMe示例,但是我无法弄清楚他们是如何做到的。似乎他们甚至没有一个UIImageView。有什么想法吗?

7个回答

28
您需要的是类似于以下内容的东西(例如,显示原始图像左上角30% x 30%的区域):
imageView.layer.contentsRect = CGRectMake(0.0, 0.0, 0.3, 0.3);

"contentsRect"的描述: 矩形在单位坐标空间中定义了应使用的图层内容的部分。


3
为什么会有踩票?如果你将imageView的“contentMode”设置为“UIViewContentModeScaleAspectFill”,这将完美地起作用。请确保还启用了“clipsToBounds”。 - Ricardo Sanchez-Saez

19

原始答案已被iOS4中的CoreAnimation所取代。

正如Gold Thumb所说:您可以通过访问UIView的CALayer来实现此操作。具体来说,是它的contentRect属性:

根据苹果文档:该矩形在单位坐标空间中定义了应使用的图层内容的部分。可动画化。


错误的。请参考@GoldThumb的答案。 - Ricardo Sanchez-Saez
3
在发布时(2009年!),我已经更新了答案,以指向CALayer。 - Rog

12
你想要让图片在UIImageView中显示并适应其大小吗?那么只需将UIImageView的contectMode更改为UIViewContentModeScaleToFill(如果纵横比例不重要)或UIViewContentModeScaleAspectFit(如果要保持它的纵横比例)。在操作栏里,可以通过设置检查器中的模式来实现。在代码中,可以这样做:
yourImageView.contentMode = UIViewContentModeScaleToFill;

如果您希望在UIImageView中原样显示大图像,最好且最简单的方法是将图像视图放置在UIScrollView内。这样您就可以缩放和移动图像。

希望能对您有所帮助。


4
这个MoveMe示例并不像你想要的那样。其中的PlacardView与使用的图像大小相同。对它所做的唯一尺寸更改是视图变换,这不会影响图像的视口。据我所知,你有一张大图片,想显示一个小视口。没有一个简单的类方法可以做到这一点,但有一个函数可以帮助你获得所需的结果:CGImageCreateWithImageInRect(CGImageRef, CGRect)。

这里有一个简短的例子:

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
[UIImageView setImage:[UIImage imageWithCGImage:imageRef]];
CGImageRelease(imageRef);

3
非常感谢。我找到了一个非常简单的解决方案,它看起来像这样:

CGRect frameRect = myImage.frame;
CGPoint rectPoint = frameRect.origin;
CGFloat newXPos = rectPoint.x - 0.5f;
myImage.frame = CGRectMake(newXPos, 0.0f, myImage.frame.size.width, myImage.frame.size.height);

我只是移动了这个框架。有时候,这个框架的一部分会超出iPhone的视口范围,但我希望这不会太重要。上面有一个遮罩,所以看起来不奇怪。用户不会注意到是如何实现的。


1
你可以通过以下方式实现:
UIImageView *imgVw=[[UIImageView alloc]initwithFrame:CGRectMake(x,y,height,width)];     
imgVw.image=[UIImage imageNamed:@""];
[self.view addSubView imgVw];
imgVw.contentMode = UIViewContentModeScaleToFill;

0

您可以使用NSLayoutConstraint来设置UIImageView的位置,它可以相对于其他元素或相对于框架进行设置。 以下是一个示例片段:

let logo = UIImage(imageLiteralResourceName: "img")
        let logoImage = UIImageView(image: logo)
        logoImage.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(logoImage)
        NSLayoutConstraint.activate([logoImage.topAnchor.constraint(equalTo: view.topAnchor,constant: 30),
                                     logoImage.centerXAnchor.constraint(equalTo: view.centerXAnchor),logoImage.widthAnchor.constraint(equalToConstant: 100),logoImage.heightAnchor.constraint(equalToConstant: 100)
                                     ])

这样你也可以轻松调整图像大小。常量参数表示,相对于指定的锚点,应该将某个锚点定位多远。
考虑以下内容:
logoImage.topAnchor.constraint(equalTo: view.topAnchor,constant: 30) 上述行设置实例logoImage的顶部锚点在父视图下方30(常量)处。负值意味着相反的方向。

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