UIImageViews, чтобы сделать копии себя после перетаскивания - PullRequest
0 голосов
/ 29 августа 2011

Я пытаюсь заставить UIImageViews копировать себя после перетаскивания. Например: у меня есть UIImageViews для всех букв алфавита.

Я подключил их всех с помощью Interface Builder, и они перемещаются независимо друг от друга.

Я вытаскиваю плитку "A" (вид изображения) из алфавита, чтобы написать слово.

В настоящее время, если вынуть букву «А», у меня нет другого вида изображения «А», чтобы использовать второе «А», если в слове есть две буквы «А».

Моя слабая попытка создать еще одну плитку письма:

for(UITouch *touch in [event allTouches])
    if ([touch view] == alphabetVowelA) {
        MainSpellingView *alphabetA;
        CGRect alphabetAa = CGRectMake(39, 104, 70, 70);
        alphabetA = [[MainSpellingView alloc] initWithFrame:alphabetAa];
        [alphabetA setImage:[UIImage imageNamed:@"a.png"]];
        [alphabetA setMultipleTouchEnabled:YES];
        [alphabetA setUserInteractionEnabled:YES];
        [self addSubview:alphabetA];
        CGPoint location = [touch locationInView:self];
        alphabetVowelA.center = location;
    }

Мой код: (у меня есть только движения A, B и C) Я полагаю, что если я смогу заставить первые три буквы делать то, что я хочу, я могу заставить их всех сделать это. Таким образом, чтобы вам было легче работать и читать, вы заметите, что только три из них настроены на что-либо.

MainSpellingView.m

MainSpellingView.h

Хотя этот код создает другую плитку с использованием изображения «а» в исходном местоположении, я не могу заставить его переместиться, поскольку он был создан после касаний: и, конечно, он будет работать только один раз при создании новой плитки.

В конечном счете, я хочу, чтобы мозаика букв (UIImageView) регенерировала дубликат самого себя в его исходном местоположении, поэтому, если мне нужно будет использовать другое из той же буквы, я могу просто перетащить дубликат, который был сделан после того, как оригинал «буквенная плитка» (UIImageView) была перетащена в область «правописания».

Я оставлю комментарий со ссылками на код ViewController, но это не обязательно.

Заранее спасибо за любую помощь или направление, которое вы можете дать мне!

Ответы [ 2 ]

0 голосов
/ 29 августа 2011

Прежде всего, если вам нужно более 3 букв, я бы попытался придумать общий вид (вы можете различить их с помощью tag s) и вычислить все остальные вещи (координаты и т. Д.) С помощью логики. Но это не ваша проблема (пока).

Вы упоминаете, что подключили свои alphabetView в IB. Кажется, что при воссоздании новых видов вы пропускаете этот шаг. То есть представление, которое должно реагировать на ваши прикосновения, является IBOutlet вашего класса контроллера представления.

Таким образом, как только перетаскивание закончено, вы должны назначить новое представление для розетки, и все должно работать как прежде.

0 голосов
/ 29 августа 2011

Вероятно, лучший способ сделать это - отслеживать события на виде сверху, который содержит все буквы в виде подпредставлений. Итак, допустим, что ваши письма - это все подпредставления представления, называемого «contentView». Теперь, если вы переопределяете

hitTest:withEvent:
contentView, возвращая nil каждый раз, когда точка касания события пересекает одну из перетаскиваемых букв, вы сможете обнаружить касание в пределах contentView (конечно, если вы не обнаружите пересечение, тогда super's hitTest, чтобы иметь правильное поведение для других подпредставлений, которые не являются буквами). На этом этапе сенсорные методы contentView будут управлять копированием букв и перетаскиванием, что возможно, поскольку все координаты будут привязаны к этому contentView. Вероятно, hitTest в contentView должен вернуть nil в двух случаях: - при касании, когда местоположение точки касания пересекает одну из букв, затем установите перетаскивание = ДА - на ощупь двигаться при перетаскивании == ДА вы должны вернуть всегда ноль - на конце касания при перетаскивании == ДА вы должны вернуть всегда ноль Во всех других случаях вы должны вызывать superT (UIView) hitTest, чтобы быть уверенным, что во всех остальных случаях выполняется надлежащая обработка.
...