我开始使用drawRect方法为UIView尝试制作消息泡泡。这是我到目前为止所做的(它不是很漂亮,但它是一个开始;接受建议让它看起来更好):
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
[self setFrame:CGRectMake(60, 5, 250, 50)];
self.contentMode = UIViewContentModeRedraw;
}
return self;
}
- (void)drawRect:(CGRect)rect{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 1.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextBeginPath(context);
CGContextMoveToPoint(context, 0, 11);
CGContextAddCurveToPoint(context,5,12.5,10,15,10,10);
CGContextAddCurveToPoint(context, 10, 1, 20, 1, 20, 1);
CGContextAddCurveToPoint(context, 20, 1, 50, 1, 240, 1);
CGContextAddCurveToPoint(context, 240, 1, 250, 1, 249, 15);
CGContextAddCurveToPoint(context, 249, 30, 249, 40, 249, 40);
CGContextAddCurveToPoint(context, 249, 45, 245, 49, 240, 49);
CGContextAddCurveToPoint(context, 240, 49, 200, 49, 20, 49);
CGContextAddCurveToPoint(context, 15, 49, 10, 45, 10, 40);
CGContextAddCurveToPoint(context, 10, 40, 10, 30, 10, 20);
CGContextAddCurveToPoint(context, 10, 20, 3, 20, 0, 10);
CGContextStrokePath(context);
}
在我的自定义单元格中,我有一个UILabel,我正在设置自定义视图:
Bubble *bubble = [[Bubble alloc]init];
_bubble = bubble;
[self addSubview:_bubble];
UILabel *message = [[UILabel alloc]init];
message.backgroundColor = [UIColor yellowColor];
message.layer.borderWidth = 1;
[message setFont:[UIFont systemFontOfSize:12]];
message.numberOfLines = 0;
message.preferredMaxLayoutWidth = 200;
_message = message;
[bubble addSubview:_message];
我使用这种方法调整UILabel的大小:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//...
CGFloat height = [self heightForText:[[individualMessages
objectAtIndex:indexPath.row] valueForKey:@"theMessage"]];
cell.message.frame = CGRectMake(20, 5, 220, height);
//...
return cell;
}
- (CGFloat)heightForText:(NSString*)text{
ChatCell *cell = [[ChatCell alloc]init];
cell.message.text = text;
cell.message.font = [UIFont systemFontOfSize:12];
[cell.message sizeToFit];
return cell.message.frame.size.height;
}
我的问题是如何将“消息”UILabel的高度传递给子类UIView并绘制气泡?现在我只是将子类包含在自定义单元格中,但当然不会调整大小。有没有办法将高度传递给UIView并稍后将其包含在单元格中?
答案 0 :(得分:1)
self.bounds.size
应该在drawRect
方法中为您提供视图的大小。
您还应该将视图的contentMode
属性设置为UIViewContentModeRedraw
,以便在调整视图大小时调用drawRect
。否则,当视图调整大小时,您现有的气泡可能会被拉伸。