我UIImageView
在其中显示 50x100 图像。
我只想显示图像 50x50 的一部分(顶部)?
我怎样才能做到这一点?
我UIImageView
在其中显示 50x100 图像。
我只想显示图像 50x50 的一部分(顶部)?
我怎样才能做到这一点?
在UIImageView中移动大图像的非常简单的方法如下。
让我们有一个大小为 (100, 400) 的图像,表示某个图片的 4 个状态,一个在另一个之下。我们想在大小为 (100, 100)的方形UIImageView中显示 offsetY = 100 的第二张图片。解决方案是:
UIImageView *iView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
CGRect contentFrame = CGRectMake(0, 0.25, 1, 0.25);
iView.layer.contentsRect = contentFrame;
iView.image = [UIImage imageNamed:@"NAME"];
这里的contentFrame是相对于真实UIImage大小的标准化帧。所以,“0”表示我们从左边框开始图像的可见部分,“0.25”表示我们有垂直偏移100,“1”表示我们要显示图像的全宽,最后,“0.25”表示我们只想显示图像高度的 1/4 部分。
因此,在局部图像坐标中,我们显示以下帧
CGRect visibleAbsoluteFrame = CGRectMake(0*100, 0.25*400, 1*100, 0.25*400)
or CGRectMake(0, 100, 100, 100);
您可以使用CGImageCreateWithImageInRect
CGImageRef 上的 Quartz 原语来裁剪图像,因此您将拥有类似以下内容:
CGImageRef imageRef = CGImageCreateWithImageInRect(originalImage.CGImage, cropRect);
UIImage* outImage = [UIImage imageWithCGImage:imageRef scale:originalImage.scale orientation:originalImage.imageOrientation]];
CGImageRelease(imageRef);
计算时cropRect
,请记住它应该以像素而不是点为单位给出,即:
float scale = originalImage.scale;
CGRect cropRect = CGRectMake(0, 0,
originalImage.size.width * scale, originalImage.size.height * 0.5 * scale);
其中0.5
因素说明了您只想要上半部分的事实。
如果您不想使用低级别,可以将图像添加到 aUIView
作为背景颜色并使用clipToBounds
CALayer 属性进行剪辑:
myView.backgroundColor = [UIColor colorWithBackgroundPattern:myImage];
myView.layer.clipToBounds = YES;
另外,相应地设置myView
界限。
我可能有一个解决方案给你。看看这是否有效。在 Interface Builder 中有一个关于图像内容填充属性的选项。您可以将其设置为top-left
. 按照界面生成器中的图像 -
在此之后将大小设置UIImageView
为 50x50 并选中“剪辑子视图”...