假设我有一个带有框架 (0,0,100,30) 的 UIImageView。该 imageView 被分配了一个图像。
只显示部分图像的最简单方法是什么?
例如:仅出现在点 30-60(宽度)和 0-30(高度)中的内容。这意味着应该隐藏图像的左右边缘。
只是为了澄清,我不想移动视图也不想改变它的大小,我只想隐藏它的框架的一个子区域。
假设我有一个带有框架 (0,0,100,30) 的 UIImageView。该 imageView 被分配了一个图像。
只显示部分图像的最简单方法是什么?
例如:仅出现在点 30-60(宽度)和 0-30(高度)中的内容。这意味着应该隐藏图像的左右边缘。
只是为了澄清,我不想移动视图也不想改变它的大小,我只想隐藏它的框架的一个子区域。
你总是可以设置一个面具。
CALayer *maskLayer = [CALayer layer];
maskLayer.backgroundColor = [UIColor blackColor].CGColor;
maskLayer.frame = CGRectmake(30.0, 0.0, 30.0, 30.0);
view.layer.mask = maskLayer;
蒙版可以是任何类型的图层,因此您甚至可以将 aCAShapeLayer
用于复杂的蒙版并做一些非常酷的事情。
我发现这个解决方案对我有用,https://stackoverflow.com/a/39917334/3192115
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
}
我相信掩盖图像是最好的选择。但是,如果您要旋转、变换、动画或想要清晰的背景,您可以执行以下操作:
创建一个子视图,它是您要显示的图像的大小。确保它必须clipsToBounds
正确并相应地定位图像。
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。