我试图在autoLayout大小类模式下屏蔽iOS 8 xcode 7.3中的图像(即在表视图单元格中)。
我看了这个链接:How to Mask an UIImageView
第一个答案对我不起作用。有问题的答案有效,但屏蔽图像的大小不正确。我的代码是:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
UIImage *imgStory = [UIImage imageNamed:@"story1"];
UIImage *imgMask = [UIImage imageNamed:@"storyFrameMask"];
UIImageView *imgViewStory = (UIImageView *)[cell viewWithTag:100];
UIImageView *imgViewBorder = (UIImageView *)[cell viewWithTag:101];
imgViewStory.image = imgStory;
CALayer *mask = [CALayer layer];
mask.contents = (id)[[UIImage imageNamed:@"storyFrameMask"] CGImage];
// mask.frame = CGRectMake(imgViewBorder.frame.origin.x, imgViewBorder.frame.origin.y, 178.0, 235.0);
mask.frame = CGRectMake(imgViewBorder.frame.origin.x, imgViewBorder.frame.origin.y, imgViewBorder.frame.size.width, imgViewBorder.frame.size.height);
imgViewStory.layer.mask = mask;
imgViewStory.layer.masksToBounds = YES;
}
我的输出屏幕截图是: [![在此处输入图像说明] [1]] [1]
我可以通过为蒙版框架的宽度和高度提供自定义值来解决问题(我在代码中注释了固定的宽度和高度。你可以看到它。),你知道这不是正确的方法。因为我使用的是自动布局和尺寸等级。
固定宽度和高度仅适用于单个尺寸类别。
这是我设定固定宽度和高度时的scren镜头: [![在此处输入图像说明] [2]] [2]
我搜索了所有网站,但没有一个用于自动布局。 任何人都可以帮助我为所有大小的类和设备配备一个好的掩码。
编辑:请注意,我的蒙面图像视图的约束与边框图像视图相同。所以他们的框架彼此相等。所以问题不在于我的布局。问题是被遮罩的图像视图上被淹没的蒙面图像。我可以通过为蒙版框架的宽度和高度提供自定义值来解决问题,但这不是自动布局中的正确方法。
答案 0 :(得分:0)
编辑:旧答案不正确。
问题出在-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
,图像视图的帧不是最终帧。它的框架时刻等于故事板中的设计尺寸。
要解决这个问题,我认为您应该覆盖自定义单元格中的- (void)layoutSubviews
,并设置正确的掩码框架,如下所示:
- (void)layoutSubviews {
[super layoutSubviews];
CALayer *mask = [CALayer layer];
mask.contents = (id)[[UIImage imageNamed:@"storyFrameMask"] CGImage];
// mask.frame = CGRectMake(imgViewBorder.frame.origin.x, imgViewBorder.frame.origin.y, 178.0, 235.0);
mask.frame = CGRectMake(imgViewBorder.frame.origin.x, imgViewBorder.frame.origin.y, imgViewBorder.frame.size.width, imgViewBorder.frame.size.height);
imgViewStory.layer.mask = mask;
imgViewStory.layer.masksToBounds = YES;
}