0
我正在研究一個照片編輯應用程序,並且需要用戶能夠繪製出裁剪照片的路徑。我有一個類與UIView一起工作,用於繪製流暢的UIBezierPath行。不過,我真的需要將它應用於UIImageView,以便可以在圖像上完成繪圖。如果我將該類更改爲UIImageView的子類,則不再有效。任何想法,我可以做些什麼來解決這個問題?或者更好的選擇來實現相同的目標?下面是我的實現:在UIImageView上爲圖像裁剪畫UIBezierPath
#import "DrawView.h"
@implementation DrawView
{
UIBezierPath *path;
}
- (id)initWithCoder:(NSCoder *)aDecoder // (1)
{
if (self = [super initWithCoder:aDecoder])
{
[self setMultipleTouchEnabled:NO]; // (2)
[self setBackgroundColor:[UIColor whiteColor]];
path = [UIBezierPath bezierPath];
[path setLineWidth:2.0];
}
return self;
}
- (void)drawRect:(CGRect)rect // (5)
{
[[UIColor blackColor] setStroke];
[path stroke];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint p = [touch locationInView:self];
[path moveToPoint:p];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint p = [touch locationInView:self];
[path addLineToPoint:p]; // (4)
[self setNeedsDisplay];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[self touchesMoved:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[self touchesEnded:touches withEvent:event];
}
@end
如果我把上的touchesBegan一個破發點或者touchesMoved預期當它火。
好吧,我也有和無userInteractionEnabled試了一下,就像我說的,即使沒有它,我仍然得到的touchesBegan火。不過,您的其他解決方案可能是我需要的。你能否更深入地解釋你的解決方案?謝謝您的回覆! –
這是行不通的,但是由於對[self setNeedsDisplay]的調用,它運行速度很慢;在後臺重新繪製圖像。沒有刷新圖像刷新繪圖嗎? –
作爲替代解決方案,您可以嘗試將DrawView放在Interface Builder中的UIImageView上。在這種情況下,您不應該在DrawView中繪製圖像。然後,UIImageView將繪製圖像,而DrawView將只繪製更加卑鄙的路徑。此外,您可以使用 - [self setNeedsDisplayInRect:path.bounds]來最小化要重繪的區域。 –