2011-09-05 112 views
4

由於各種原因,我已將這些方法從UIView子類移到我的viewcontroller。我終於搞定了,除了一件事。我不僅可以拖動以編程方式創建的UIImageviews,但實際的視圖控制器視圖也可以拖動。造成這種不良影響。我猜這是觸及anyobject的事實,而背景本身就是一個對象。我只是不確定如何排除背景。我會認爲它需要「UserInteraction啓用」,但我猜不是?我只希望它使UIImageView可拖動。請原諒我的noobness。我還在學習。touchesbegan,touchesmoved,touchesended問題

我有一個名爲「letterDictionary」的NSMutableDictionary中的所有圖像我想要「可觸摸」。是否有可能只適用於字典中的內容?

http://imgur.com/W08dI

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 
    UITouch *touch = [touches anyObject]; 
    touchPoint = [touch locationInView:self.view]; 

    movingLetter = [touch view]; 

    CGPoint pointInside = [touch locationInView:[touch view]]; 
    if ([movingLetter pointInside:pointInside withEvent:event]) touchedInside = YES; 

} 


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    if (touchedInside) { 
     UITouch *touch = [touches anyObject]; 
     CGPoint newPoint = [touch locationInView:self.view]; // get the new touch location 
     movingLetter.center = CGPointMake(movingLetter.center.x + newPoint.x - touchPoint.x, movingLetter.center.y + newPoint.y - touchPoint.y);   
     touchPoint = newPoint;  
    } 
} 


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    if (touchedInside) { 
     UITouch *touch = [touches anyObject]; 
     CGPoint newPoint = [touch locationInView:self.view]; 

     movingLetter.center = CGPointMake(movingLetter.center.x + newPoint.x - touchPoint.x, movingLetter.center.y + newPoint.y - touchPoint.y); 

     if (CGRectIntersectsRect([movingLetter frame], [placeHolder frame])) 
      { 
       movingLetter.center = placeHolder.center; 
      } 

    } 
    touchedInside = NO; 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    touchedInside = NO; 
} 

回答

2

您有被感動的觀點,

UITouch *touch = [touches anyObject]; 
    touchPoint = [touch locationInView:self.view]; 
    movingLetter = [touch view]; 

只是測試,看它是否是你正在尋找的類(如UIImageView)然後返回

UITouch *touch = [touches anyObject]; 
    if (![[touch view] isKindOfClass:[UIImageView class]]) 
    { 
     return; 
    } 
+0

,完美的工作!我應該知道這樣做!出於好奇,但是,你或者有人告訴我如何將它添加到我的NSMutableDictionary中的對象(UIImageViews)? – Jason

+0

請參閱http://stackoverflow.com/questions/4073598/user-interaction-on-a-uiimageview – cdasher

0

在這個touchesBegen方法:

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event 
{ 
    [self.view endEditing:YES]; 

    UITouch *touch = [touches anyObject]; 
    _previousPoint1 = [touch  previousLocationInView:self.main_uiview]; 
    _previousPoint2 = [touch previousLocationInView:self.main_uiview]; 
    _currentPoint = [touch locationInView:self.main_uiview]; 

    [self touchesMoved:touches withEvent:event]; 

    self.bezierPath = [UIBezierPath bezierPath]; 
    [self.bezierPath moveToPoint:_currentPoint]; 
    } 

TouchesMove方法

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent*)event 
    { 


    UITouch *touch = [touches anyObject]; 

    _previousPoint2 = _previousPoint1; 
    _previousPoint1 = [touch previousLocationInView:self.main_uiview]; 
    _currentPoint = [touch locationInView:self.main_uiview]; 

    lastPoint = _currentPoint; 

    [_bezierPath addLineToPoint:lastPoint]; 

    // calculate mid point 
    CGPoint mid1 = midPoint4(_previousPoint1, _previousPoint2); 
    CGPoint mid2 = midPoint4(_currentPoint, _previousPoint1); 

    UIGraphicsBeginImageContextWithOptions(self.bg_imageview.frame.size, NO, 0.0); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(context,brush); 

    CGContextSetLineCap(context, kCGLineCapRound); 
    CGContextSetLineJoin(context,kCGLineJoinRound); 

    [self.bg_imageview.image drawInRect:CGRectMake(0, 0, self.bg_imageview.frame.size.width, self.bg_imageview.frame.size.height)]; 

    CGContextMoveToPoint(context, mid1.x, mid1.y); 

    // Use QuadCurve is the key 
    CGContextAddQuadCurveToPoint(context, _previousPoint1.x, _previousPoint1.y, mid2.x, mid2.y); 

    CGContextSetLineCap(context, kCGLineCapRound); 

    CGContextSetStrokeColorWithColor(context,[UIColor blackColor].CGColor); 

    CGContextSetLineWidth(context, 3.0); 


    CGContextStrokePath(context); 

    self.bg_imageview.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext();} 
相關問題