Будучи новичком в чертеже iOS, я хотел нарисовать небольшой контейнер для всплывающих подсказок, который состоит из прямоугольника со стрелкой индикатора. Я создал 2 UIBezierPaths и присоединился к ним с помощью «appendPath». Я думал, что это был правильный путь, но после битвы в течение 1 дня мне пришлось обратиться за помощью. Вот скриншот, где я сейчас нахожусь:Присоединился к моменту UIBezierPath в целом
Как вы можете видеть, что проблема просто, что, когда я пытаюсь погладить присоединился путь, он не получает погладил в целом, но, как отдельный штук. Возможно, кто-то может указать мне в правильном направлении, чтобы решить это?
Вот код:
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// create indicator path
UIBezierPath *indicator = [[UIBezierPath alloc] init];
// corner radius
CGFloat radius = self.cornerRadius;
// main path
UIBezierPath *path;
// format frame
rect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height - self.indicatorSize.height);
// assign path
path = [UIBezierPath bezierPathWithRoundedRect: rect
byRoundingCorners:UIRectCornerAllCorners
cornerRadii:CGSizeMake(radius, radius)];
// x point
CGFloat x = (rect.size.width - self.indicatorSize.width)/2;
[indicator moveToPoint:CGPointMake(x, rect.size.height)];
[indicator addLineToPoint:CGPointMake(x + self.indicatorSize.width/2, rect.size.height + self.indicatorSize.height)];
[indicator addLineToPoint:CGPointMake(x + self.indicatorSize.width, rect.size.height)];
// close path
[indicator closePath];
// append indicator to main path
[path appendPath:indicator];
[[UIColor redColor] setStroke];
[path setLineWidth:2.0];
[path stroke];
[self.fillColor setFill];
[path fill];
// release indicator
[indicator release];
}
Заранее спасибо
Привет. Спасибо за подсказку, однако я попробовал, и хотя он работает, он рисует двойную границу на нижней границе, я не знаю, почему вы можете проверить это здесь: http://oi51.tinypic.com/2cxevmd.jpg , И вот новый код, который я рисую: http://pastebin.com/imcvhGdQ. Я делаю что-то неправильно? – Hidden
Попробуйте начать рисование на 0,5,0,5, чтобы избежать рисования на половине пикселей: см. Это для более подробной информации http://www.cocoabuilder.com/archive/cocoa/204399-drawing-1-pixel-perfect-wide-bordered-nsbezierpath .html – iain
Я ответил на это здесь с изображением: http://stackoverflow.com/a/15097830/210171 – nielsbot