我已經創建了一個ViewController,並在自定義類中選擇了myView。在myView中,當用戶單擊並拖動手指時,它將繪製一條直線,當它再次拖動時,前一行消失,並創建新的一條。如何檢測UIImageView上的觸摸並繪製線條?
我的代碼:
@implementation GestureView
{
CGPoint _originOfTouchPoint; // your fist touch detected in touchesBegan: method
CGPoint _currentFingerPositionPoint; // the position you have dragged your finger to
CGFloat _strokeWidth; // the width of the line you wish to draw
id _touchStartedObject; // the object(UIView) that the first touch was detected on
}
// If you use Interface Builder to design your interface, Objects in a nib file are reconstituted and then initialized using
// their initWithCoder: method
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super initWithCoder:decoder];
if (self) {
// Initialization code
_originOfTouchPoint = CGPointMake(0.0, 0.0);
_currentFingerPositionPoint = CGPointMake(100.0, 100.0);
_strokeWidth = 2.0;
}
return self;
}
/*
// Use initWithFrame if you are not loding the UIView from a nib file
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
_originOfTouchPoint = CGPointMake(0.0, 0.0);
_currentFingerPositionPoint = CGPointMake(100.0, 100.0);
_strokeWidth = 2.0;
}
return self;
}
*/
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextSetLineWidth(context, _strokeWidth);
// fisrt point of line
CGContextMoveToPoint(context, _originOfTouchPoint.x, _originOfTouchPoint.y);
// last point of line
CGContextAddLineToPoint(context, _currentFingerPositionPoint.x, _currentFingerPositionPoint.y);
// draw the line
CGContextStrokePath(context);
}
#pragma mark touches
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// get starting point and first view touched (if you need to send that view messages)
_originOfTouchPoint = [[touches anyObject] locationInView:self];
_touchStartedObject = [[touches anyObject] view];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint movedToPoint = [[touches anyObject] locationInView:self];
// if moved to a new point redraw the line
if (CGPointEqualToPoint(movedToPoint, _currentFingerPositionPoint) == NO)
{
_currentFingerPositionPoint = movedToPoint;
// calls drawRect: method to show updated line
[self setNeedsDisplay];
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
// reset values
_originOfTouchPoint = CGPointZero;
_currentFingerPositionPoint = CGPointZero;
_touchStartedObject = nil;
}
@end
我已經添加上的ViewController 3 ImageView的,我想檢測觸摸時,在任何ImageView的用戶點擊,然後當他拖動他的手指該行開始從ImageView的繪製。 我可以在任何地方畫線在屏幕上,但我想限制當點擊的ImageView並在另一個ImageView的結束
參考裏面的鏈接代碼https://github.com/GrioSF/Android-Pattern -Lock-on-iOS – Tirth 2013-03-19 10:30:59
您必須修改[touches anyObject],使用您的uiimageview對象更改anyObject – 2013-03-19 10:35:16