прикосновения начались, коснулись, коснулись вопроса - PullRequest
4 голосов
/ 05 сентября 2011

По разным причинам я переместил эти методы из подкласса UIView в мой viewcontroller.И, наконец, я заработал, за исключением одной вещи.Я не только могу перетаскивать UIImageviews, которые я программно создал, но и фактическое представление контроллеров представления также перетаскивается.Создание этого нежелательного эффекта.Я думаю, это тот факт, что он касается любого объекта, а сам фон является объектом.Я просто не уверен, как исключить фон.Я бы подумал, что для этого потребуется «UserInteraction включено», но я не думаю, что?Я только хочу, чтобы UIImageViews перетаскивали.Пожалуйста, прости мою нубизм.Я еще учусь.

У меня есть все изображения, которые я хотел бы "touchable" в NSMutableDictionary под названием "letterDictionary".Будет ли возможно только прикосновение к тому, что в словаре?

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 ]

2 голосов
/ 05 сентября 2011

У вас есть вид, который был затронут,

    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 голосов
/ 06 июня 2017

В этом штрихе метод Бегена:

-(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];
     }

Метод касания-движения

  -(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();}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...