Назначьте событие TouchUpInside нескольким UIImageViews с помощью цикла с помощью метода-обработчика, который может дополнительно анимировать / манипулировать каждым UIImageView - PullRequest
0 голосов
/ 08 августа 2011

Я перебрал NSArray объектов NSDictionary, которые содержат данные для нескольких отображаемых изображений. Эти данные затем преобразуются в объекты UIImageView и добавляются в текущий вид как подпредставления. Достаточно просто! Все изображения, переданные через массив / dict, отображаются на экране по желанию, и пока он прекрасно работает:

for (NSDictionary *caseData in caseImages) { // caseImages is the array
    UIImage *caseImage = [UIImage imageNamed:[caseData objectForKey:@"image_file"]];
    UIImageView *caseView = [[UIImageView alloc] initWithImage:caseImage];
    caseView.frame = CGRectMake([[caseData objectForKey:@"position_x"] intValue], [[caseData objectForKey:@"position_y"] intValue], [[caseData objectForKey:@"size_w"] intValue], [[caseData objectForKey:@"size_h"] intValue]);
    [self.view addSubview:caseView ];
}

Однако теперь мне нужно сделать еще один шаг и реализовать обработчик события touchUpInside, который может быть присоединен к каждому из этих объектов UIImageView, если это возможно, таким образом, чтобы метод обработчика мог дополнительно анимировать / манипулировать каждым UIImageView, идеально центрируя и увеличивая затронутое изображение, и просто затемняя остальные изображения.

Я застрял на том, как успешно добавить сенсорные события, с возможностью ссылаться на изображение, к которому прикоснулся случай, а также на остальные нетронутые изображения, если это возможно, и затем применять соответствующие анимации перехода к каждому изображение соответственно.

Я видел примеры, похожие на фрагмент ниже, но я не смог заставить его работать:

[caseView addTarget:self action:@selector(spotlightCase) forControlEvents:UIControlEventTouchUpInside];

Хотя, если бы я на самом деле заставил его работать, я все еще чувствовал бы себя немного неуверенным в том, как успешно ссылаться на каждый и каждый UIImageView, созданный из цикла, так что каждое изображение может быть должным образом анимировано / обработано, в соответствии с которым один действительно был тронут. Нужно ли мне новое свойство массива в моем контроллере представления, которое будет содержать указатели для каждого объекта UIImageView, добавленного в представление? Ничего из этого даже не достижимо с UIImageViews? Я видел, как кто-то упоминал использование пользовательских объектов UIButton, но я подумал, что это может быть столь же сложно / невозможно увидеть, так как мне все равно нужно анимировать размер и расположение изображений.

Есть ли шанс, что вы сможете пролить свет на то, как реализовать все вышеперечисленные хитрые начинания?

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Один из способов сделать это - добавить UIButton в представление вашего контроллера представления для каждого изображения и установить для свойства backgroundImage значение [UIImage imageNamed:] внутри вашего цикла.Вы можете установить универсальный селектор на цель каждой кнопки, как во втором фрагменте.Я использовал подобный прием раньше и установил свойство тега кнопки, чтобы определить индекс кнопки, которая была нажата.Если вы добавите двоеточие в конец вашего @selector(spotlightCase:), ваш метод также получит идентификатор объекта, который его вызвал.Ваше определение метода будет следующим:

- (void) spotlightCase:(id) sender;

Здесь вы можете использовать sender.tag для управления своей логикой.

Надеюсь, это поможет

Дейв

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

Попробуйте установить значение caseImage.tag и использовать его для определения изображения, к которому прикоснулись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...