Как переместить центр UILabel в NSMutableArray UILabels, зависит от того, куда пользователь касается и перетаскивает эту UILabel? - PullRequest
0 голосов
/ 31 августа 2011

У меня есть NSMutableArray UILabels.Мне нужно иметь возможность выбрать конкретную UILabel в этом NSMutableArray при касании пользователя и переместить центр этого касания UILabel туда, куда пользователь перетаскивает палец.

Я могу переместить определенную UILabel вмой букетOfLabels NSMutableArray, выполнив:

UIGestureRecognizer *gestureRecognizer;
touchPosition = [gestureRecognizer locationInView:mainView];
NSLog(@"x: %f", touchPosition.x);

UILabel *temp;
temp = [bunchOfLabels objectAtIndex:0];
temp.center = touchPosition;

, это всегда будет перемещать первый ярлык, даже если пользователь касается второго, третьего или любого другого ярлыка.

, но мне нужно сказать, переместите objectAtIndex: 4 UILabel везде, где пользователь касается и перетаскивает объект. AtIndex: 4 UILabel.

Я новичок, может кто-нибудь помочь мне с этим?Спасибо!

Добавлена ​​информация: в настоящее время я использую UIPanGestureRecognizer, например:

-(void)setupLabels {

    bunchOfLabels = [[NSMutableArray alloc] initWithCapacity:[characters count]];

    for (int i=0; i < [characters count]; i++)  {

        int xPosition = arc4random() % 518;
        int yPosition = arc4random() % 934;

        UILabel *tempCharacterLabel = [[UILabel alloc] initWithFrame:CGRectMake(xPosition, yPosition, 60, 60)];
        tempCharacterLabel.text = [characters objectAtIndex:i]; // characters is another NSMutableArray contains of NSStrings
        [tempCharacterLabel setUserInteractionEnabled:YES];
        [bunchOfLabels addObject:tempCharacterLabel];

        UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panElement:)];
        [panGesture setMaximumNumberOfTouches:2];
        [[bunchOfLabels objectAtIndex:i] addGestureRecognizer:panGesture];

    }
}

-(void)panElement:(UIPanGestureRecognizer *)gestureRecognizer 
{
    UILabel *temp;
    temp = [bunchOfLabels objectAtIndex:1];
    temp.center = touchPosition;
}

Пока все в порядке, но я застрял в возможности переместить определенную UILabel вСвязкаOfLabels (в коде выше, objectAtIndex: 1).

1 Ответ

3 голосов
/ 31 августа 2011

Ура !!! Понял! Я делаю panElement, как показано ниже, и теперь он работает!

-(void)panElement:(UIPanGestureRecognizer *)gesture
{
    UILabel *tempLabel = (UILabel *)gesture.view;
    CGPoint translation = [gesture translationInView:tempLabel];

    tempLabel.center = CGPointMake(tempLabel.center.x + translation.x, tempLabel.center.y + translation.y);

    [gesture setTranslation:CGPointZero inView:tempLabel];
}

Спасибо тем, кто пытается ответить на мой вопрос!

...