Используя основную графику, я пытаюсь нарисовать линию, в которой, когда я пытаюсь добавить тень, создается lin и пузыри внутри строки, см. Изображение, я не способный решить проблему. пожалуйста, найти свой код нижеВывод в строке чертежа с использованием основной графики: отображаются пузыри
-(void)drawRect:(CGRect)rect
{
[curImage drawAtPoint:CGPointMake(0, 0)];
CGPoint mid1 = midPoint(previousPoint1, previousPoint2);
CGPoint mid2 = midPoint(currentPoint, previousPoint1);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.layer renderInContext:context];
CGContextMoveToPoint(context, mid1.x, mid1.y);
CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, self.lineWidth);
CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor);
CGContextSetShadow(context, CGSizeMake(-16.00, -5.0f), 5.0f);
CGContextStrokePath(context);
[super drawRect:rect];
[curImage release];
}
Ниже touchesMoved
метод.
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
previousPoint2 = previousPoint1;
previousPoint1 = [touch previousLocationInView:self];
currentPoint = [touch locationInView:self];
// calculate mid point
CGPoint mid1 = midPoint(previousPoint1, previousPoint2);
CGPoint mid2 = midPoint(currentPoint, previousPoint1);
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, mid1.x, mid1.y);
CGPathAddQuadCurveToPoint(path, NULL, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
CGRect bounds = CGPathGetBoundingBox(path);
CGPathRelease(path);
CGRect drawBox = bounds;
//Pad our values so the bounding box respects our line width
drawBox.origin.x -= self.lineWidth * 2;
drawBox.origin.y -= self.lineWidth * 2;
drawBox.size.width += self.lineWidth * 4;
drawBox.size.height += self.lineWidth * 4;
UIGraphicsBeginImageContext(drawBox.size);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
curImage = UIGraphicsGetImageFromCurrentImageContext();
[curImage retain];
UIGraphicsEndImageContext();
[self setNeedsDisplayInRect:drawBox];
}
CGPoint midPoint(CGPoint p1, CGPoint p2)
{
return CGPointMake((p1.x + p2.x) * 0.5, (p1.y + p2.y) * 0.5);
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
previousPoint1 = [touch previousLocationInView:self];
previousPoint2 = [touch previousLocationInView:self];
currentPoint = [touch locationInView:self];
[self touchesMoved:touches withEvent:event];
}
Здесь вопрос приходит, когда я пытаюсь добавить строку
CGContextSetShadow(context, CGSizeMake(-16.00, -5.0f), 5.0f);
Пожалуйста, помогите мне с вопросом, заранее спасибо. см. редактирование вопроса с помощью методов.
спасибо за помощь, но я не могу точно дойти до вашей точки. поскольку это для меня совершенно новая тема. –
Достаточно честный. Когда пользователь перемещает палец, создавая общий ход, записывается серия точек (каждый цикл цикла цикла). Вы, по-видимому, только записываете предыдущую и текущую точку для записи в ваш новый 'UIImage'. Вместо этого консолидируйте все точки, созданные между сообщением 'touchhesBegan: withEvent:' и сообщением 'touchhesEnded: withEvent:', преобразуйте их в путь (либо CGPath, либо UIBezierPath) ** после ** пользователь поднял палец ('touchesEnded: withEvent:') и передать полный штрих вашему новому 'UIImage'. Замечания @ relikd о прозрачных слоях тоже хороши. – gschandler
Спасибо за помощь в коде, ваш код правильный, но он создаст чертеж на сенсорном конце. И мне нужно нарисовать линию с движением пальца пользователя. Поэтому я пытаюсь изменить код, и пусть вы знаете, что такое результат. –