如何隐藏UIView的子框架?

7

假设我有一个框架为(0,0,100,30)的UIImageView。该imageView被分配了一张图片。

最简单的方法是显示图片的一部分是什么?

例如:只显示宽度在30-60点之间和高度在0-30之间的部分。这意味着图像的左右边缘应该被隐藏。

只是为了澄清,我不想移动视图也不想改变它的大小,我只想隐藏它框架的一个子矩形。

3个回答

4
您可以随时设置一个掩码。
CALayer *maskLayer = [CALayer layer];
maskLayer.backgroundColor = [UIColor blackColor].CGColor;
maskLayer.frame = CGRectmake(30.0, 0.0, 30.0, 30.0);

view.layer.mask = maskLayer;

遮罩可以是任何类型的图层,因此您甚至可以使用CAShapeLayer来创建复杂的遮罩并进行一些很酷的操作。


对象类型为 'CALayer *' 的属性 fillColor 未找到。我是否缺少了一个导入? - David Ben Ari
所以,将背景颜色设置为CGColor(而不是fillColor)就解决了问题。@Ryan Poolos,请编辑您的答案,我会接受它。 - David Ben Ari
哦,抱歉。fillColorCAShapeLayer上的属性,我通常使用形状图层来进行蒙版操作。习惯使然。 :p - Ryan Poolos
我尝试了CALayer,但对我无效。所以我尝试了CAShapeLayer,它有效。 - Rachel

1
我发现这个解决方案对我有用,https://dev59.com/mGgu5IYBdhLWcg3wWVyF#39917334
func mask(withRect rect: CGRect, inverse: Bool = false) {
    let path = UIBezierPath(rect: rect)
    let maskLayer = CAShapeLayer()

    if inverse {
        path.append(UIBezierPath(rect: self.view.bounds))
        maskLayer.fillRule = kCAFillRuleEvenOdd
    }

    maskLayer.path = path.cgPath
    imageView?.layer.mask = maskLayer
}

0

我认为遮罩图像是最好的选择。但如果您想要旋转、变换、动画或者想要一个清晰的背景,您可以这样做:

创建一个子视图,其大小与您想要显示的图像相同。确保它的clipsToBounds属性设置为true,并相应地定位图像。

UIView *mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];

//this is the part of the image you wish to see
UIView *imageWindow = [[UIView alloc] initWithFrame:CGRectMake(30, 0, 30, 30)];
imageWindow.clipsToBounds = YES;

//your image view is the height and width of mainView and x and y is imageWindow - mainView. You can do this manually or put in calculations.
UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(imageWindow.frame.origin.x - mainView.frame.origin.x, imageWindow.frame.origin.y - mainView.frame.origin.y, mainView.frame.size.width, mainView.frame.size.height)];
myImage.image = [UIImage imageNamed:@"1024x1024.png"];

[imageWindow addSubview:myImage];
[mainView addSubview:imageWindow];
[self.view addSubview:mainView];

检查了我的代码,我认为mainView不必要,你可以直接将imageWindow添加到self.view中。


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