Sử dụng đồ họa lõi, tôi đang cố gắng vẽ một đường, trong đó khi tôi cố gắng thêm bóng được tạo ra lin và bong bóng bên trong dòng, xem hình ảnh, tôi không có thể giải quyết vấn đề. vui lòng tìm mã của tôi bên dướivấn đề trong dòng vẽ bằng cách sử dụng đồ họa cốt lõi: bong bóng được hiển thị
-(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];
}
Dưới đây là phương pháp 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];
}
Ở đây vấn đề này đến khi tôi cố gắng thêm dòng
CGContextSetShadow(context, CGSizeMake(-16.00, -5.0f), 5.0f);
Xin hãy giúp tôi ra khỏi vấn đề này, cảm ơn trước. vui lòng xem câu hỏi chỉnh sửa bằng các phương pháp.
cảm ơn sự giúp đỡ, nhưng tôi không thể xác định chính xác điểm của bạn. vì đây là chủ đề hoàn toàn mới đối với tôi. –
Đủ công bằng. Khi người dùng di chuyển ngón tay của họ tạo ra đột quỵ tổng thể, một loạt các điểm được ghi lại (một trong mỗi chu kỳ vòng lặp chạy). Bạn dường như chỉ ghi lại điểm trước đó và hiện tại để ghi lại vào 'UIImage' mới của bạn. Thay vào đó, hợp nhất tất cả các điểm được tạo ra giữa thông điệp 'touchesBegan: withEvent:' và 'touchesEnded: withEvent:', chuyển đổi chúng thành đường dẫn (hoặc CGPath hoặc UIBezierPath) ** sau ** người dùng đã nhấc ngón tay của họ lên ('touchesEnded: withEvent:'), và thực hiện cú đánh đầy đủ tới 'UIImage' mới của bạn. Các nhận xét của @ relikd về các lớp trong suốt cũng tốt. – gschandler
Cảm ơn bạn đã giúp mã, mã của bạn là thích hợp nhưng nó sẽ tạo ra các bản vẽ ở cuối cảm ứng, Và tôi cần phải vẽ đường với chuyển động của người dùng của ngón tay, Vì vậy, tôi đang cố gắng để thay đổi mã den cho u biết những gì là kết quả. –