Помощь с зацикливанием, хранением и использованием CGPoints

У меня есть несколько UIButtons, которые перемещаются в разные места, заданные массивом с именем totalSmallButtonLocations. Итак, я прохожу через availableLocations, NSMutableArray, назначая разные CGPoints и удаляя эти точки из availableLocations. Как только это будет сделано, появится анимация UIView для перемещения кнопок в новые места.

В настоящее время это работает, но, как вы можете видеть ниже, это очень долго (и в реальном проекте есть гораздо больше кнопок и мест):

int randomNumber;
NSValue *val;
CGPoint a, b, c;
NSMutableArray *availableLocations;
availableLocations = [NSMutableArray arrayWithArray:totalSmallButtonLocations];

randomNumber = arc4random_uniform(3);
val = [availableLocations objectAtIndex:randomNumber];
a = [val CGPointValue];
[availableLocations removeObjectAtIndex:randomNumber];
randomNumber = arc4random_uniform(13);
val = [availableLocations objectAtIndex:randomNumber];
b = [val CGPointValue];
[availableLocations removeObjectAtIndex:randomNumber];
randomNumber = arc4random_uniform(12);
val = [availableLocations objectAtIndex:randomNumber];
c = [val CGPointValue];

[UIView animateWithDuration:0.5 animations:^{
    button1.center = a;
    button2.center = b;
    button3.center = c;

Итак, я пытаюсь создать цикл, но аспект CGPoint вызывает некоторые проблемы. Я думаю, что мой цикл в порядке, но я не знаю, как назначить его во время раздела анимации, и он выдает ошибку:

«Назначение «CGPoint» (также известное как «struct CGPoint») из несовместимого идентификатора типа»:

int randomNumber;
NSValue *val;
CGPoint a;
NSMutableArray *availableLocations;
availableLocations = [NSMutableArray arrayWithArray:totalSmallButtonLocations];
NSMutableArray *points = [NSMutableArray array];

for(int looper = 14; looper > 0; looper--)
{
    randomNumber = arc4random_uniform(looper);
    val = [availableLocations objectAtIndex:randomNumber];
    a = [val CGPointValue];
    [points addObject:[ NSValue valueWithCGPoint:a]];
}
[UIView animateWithDuration:0.5 animations:^{
    button1.center = [points objectAtIndex:1];
    button2.center = [points objectAtIndex:2];
    button3.center = [points objectAtIndex:3];

person William Robinson    schedule 11.12.2012    source источник
comment
Не злоупотребляйте тегом xcode. Удаленный.   -  person    schedule 12.12.2012
comment
Упс, буду иметь в виду на будущее.   -  person William Robinson    schedule 12.12.2012
comment
спасибо, что помните об этом.   -  person    schedule 12.12.2012


Ответы (1)


Проблема в том, что вы получаете указатель на CGPoint вместо самого CGPoint. Проблема в том, что [points objectAtIndex:1]; вы получаете объект вместо структуры CGPoint. Вам просто нужно обернуть его вот так [[points objectAtIndex:1] CGPointValue]; и предупреждение должно исчезнуть.

person Ryan Poolos    schedule 11.12.2012
comment
Рад, что смог помочь :) Удачного кодирования. - person Ryan Poolos; 12.12.2012