この方法でコーナーをマスクすることはできないと確信しています。セルbackgroundView
は集合用の画像なUITableView
のでマスキング感はありません。
この問題の可能な解決策は、自分で角を丸くすることです。上のセルの上隅と下のセルの下隅のみを丸めたいので、これは少し注意が必要です。幸いなことに、@lomanf は任意の角を丸めるための優れたソリューションをここに投稿しました: Round two corners in UIView。彼のMTDContextCreateRoundedMask
方法を使えば、目標を達成することができます。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Other cell instantiation
// First cell in section
if (indexPath.row == 0) {
[self roundTopOrBottomCornersOfCell:cell top:YES];
}
// Last cell in section
else if (indexPath.row == tableView.numberOfRowsInSection:indexPath.section-1) {
[self roundTopOrBottomCornersOfCell:cell top:NO];
}
}
// Modified from the second part of @lomanf's Solution 1
- (void)roundTopOrBottomCornersOfCell:(UITableViewCell*)cell top:(BOOL)top {
// Set constant radius
CGFloat radius = 5.0;
// Create the mask image you need calling @lomanf's function
UIImage* mask;
if (top) {
mask = MTDContextCreateRoundedMask(self.view.bounds, radius, radius, 0.0, 0.0);
}
else {
mask = MTDContextCreateRoundedMask(self.view.bounds, 0.0, 0.0, radius, radius);
}
// Create a new layer that will work as a mask
CALayer* layerMask = [CALayer layer];
layerMask.frame = cell.bounds;
// Put the mask image as content of the layer
layerMask.contents = (id)mask.CGImage;
// Set the mask layer as mask of the view layer
cell.layer.mask = layerMask;
}