Вы можете создать 4 разных изображения: 1 для верха, 1 для низа, 1 для середины и 1 для верха / низа (округлено по всем 4 углам). Затем установите вид фона на свое собственное изображение, в зависимости от положения в таблице. В качестве альтернативы, если вы хотите использовать вид, вот пользовательский вид, который округляет только определенные углы:
.h
#import <UIKit/UIKit.h>
enum {
RoundedCornerNone = 0,
RoundedCornerUpperRight = 1 << 0,
RoundedCornerLowerRight = 1 << 1,
RoundedCornerLowerLeft = 1 << 2,
RoundedCornerUpperLeft = 1 << 3
};
typedef NSUInteger RoundedCornerOptions;
@interface PartiallyRoundedView : UIView
@property (nonatomic, assign) RoundedCornerOptions roundedCorners;
@end
.m
#import "PartiallyRoundedView.h"
@implementation PartiallyRoundedView
@synthesize roundedCorners;
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame])) {
}
return self;
}
- (void)drawRect:(CGRect)rect
{
float radius = 10;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 1.0);
CGContextBeginPath(context);
CGContextSetRGBStrokeColor(context, .6, .6, .6, 1);
CGContextSetRGBFillColor(context, .968, .968, .968, 1);
CGContextMoveToPoint(context, rect.origin.x + rect.size.width - radius, rect.origin.y);
CGContextAddLineToPoint(context, rect.origin.x + radius, rect.origin.y); //Draw top line
if (self.roundedCorners >=8) { //Round upper-left corner
CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + radius, radius,
-M_PI / 2, M_PI, 1);
self.roundedCorners-=8;
}
else {
CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y);
CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + radius);
}
CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height - radius); //Draw left line
if (self.roundedCorners >=4) { //Round lower-left corner
CGContextAddArc(context, rect.origin.x + radius , rect.origin.y + rect.size.height - radius,
radius, M_PI, M_PI / 2, 1);
self.roundedCorners-=4;
}
else {
CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height);
CGContextAddLineToPoint(context, rect.origin.x + radius, rect.origin.y + rect.size.height);
}
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width - radius, rect.origin.y + rect.size.height); //Draw bottom line
if (self.roundedCorners >=2) { //Round lower-right corner
CGContextAddArc(context, rect.origin.x + rect.size.width - radius ,
rect.origin.y + rect.size.height - radius, radius, M_PI / 2, 0.0f, 1);
self.roundedCorners-=2;
}
else {
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + rect.size.height);
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + rect.size.height - radius);
}
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + radius); //Draw right line
if (self.roundedCorners ==1) { //Round upper-right corner
CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + radius,
radius, 0.0f, -M_PI / 2, 1);
}
else {
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y);
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width - radius, rect.origin.y );
}
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathFillStroke);
}
- (void)dealloc {
[super dealloc];
}
@end
Вы можете создать экземпляр этого вида (вам нужно добавить немного, чтобы заполнить середину любым цветом, который вы хотите). Просто передайте правильное скругление угла в зависимости от того, являетесь ли вы первой, последней, средней или первой и последней ячейкой.