Как создать копию экземпляра UIImageView?

Как создать копию экземпляра UIImageView, который можно манипулировать независимо от первого экземпляра?

Я пробовал UIImageView *tempCopy = [instance copy], но он сработает. Есть ли другой способ?

Ответ 1

Вероятно, это сбой, потому что UIImageView не соответствует протоколу NSCopying. Сделайте это самостоятельно: создайте новый UIImageView и установите любое свойство из вашего оригинала, который вам интересен.

Ответ 2

UIImageView не соответствует NSCopying, но соответствует NSCoding. Архивируйте свое мнение, а затем де-архивируйте его, чтобы получить совершенно новую копию.

Для ленивого наклона это выглядит так:

NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:imageView];
UIImageView *copy = [NSKeyedUnarchiver unarchiveObjectWithData:data];

Ответ 3

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

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

Если все, что вам нужно, это статическое изображение (subviews не обеспечивают взаимодействия), я бы рекомендовал сделать следующее

UIGraphicsBeginImageContext(imageView.rect.size);

[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageView *copyImageView = [[UIImageView alloc] initWithImage:viewImage];

Это гарантирует, что tue subviews все будет сохранено как статическое изображение...

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

Привет