2013-03-19 73 views
1

我已經創建了一個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的結束

enter image description here

enter image description here

+0

參考裏面的鏈接代碼https://github.com/GrioSF/Android-Pattern -Lock-on-iOS – Tirth 2013-03-19 10:30:59

+0

您必須修改[touches anyObject],使用您的uiimageview對象更改anyObject – 2013-03-19 10:35:16

回答

0

您可以在默認情況下它的啓用與-[UIView setUserInteractionEnabled:]觸摸只是畫線NO對UIImageView

關於繪畫...從文檔:

UIImageView類經過優化,可將其圖像繪製到顯示屏上。 UIImageView不會調用drawRect:一個子類。如果您的子類需要 自定義繪圖代碼,建議您使用UIView作爲基類 類。

0

試試這個:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    //To get tag of touch view 
    int viewTag=[touch view].tag; 

    if ([[touch view] isKindOfClass:[UIImageView class]]) 
    { 
     //Write your code... 
    } 
} 

,並設置所有觸摸圖像UserInteractionEnabled這樣的:

[imageName setUserInteractionEnabled:YES]; 
相關問題