Установить значение для указателя в цели c? - PullRequest
1 голос
/ 05 ноября 2010

У меня есть 2 UIImageVIew:

UIImageView *imageView1 = [[UIImageView alloc] init];
UIImageView *imageView2 = [[UIImageView alloc] init];

и один UIImage:

UIImage *image = [[UIImage alloc] imageWithNamed:@"image_name.png"];

, поэтому я устанавливаю изображение для обоих UIImageView с одинаковым UIImage:

imageView1.image = image;
imageView2.image = image;

Как мне изменить значение UIImage * image (Не указать UIImage * image на другой UIImage с помощью: image = [[UIImage alloc] imageWithNamed: @ "another_image_name.png"]; ).Поэтому, когда я делаю это, я хочу, чтобы imageView1 и imageView2 отображали одно и то же изображение ( another_image_name.png )

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

UIImage экземпляры являются неизменяемыми, если они были alloc 'd и init' d, они не могут измениться.Если вы хотите изменить изображения для ваших видов изображений, вам нужно alloc и init другой экземпляр UIImage (или использовать удобные методы, например, +imageNamed: и т. Д.) И установить его для обоих видов изображений.

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

0 голосов
/ 05 ноября 2010

Вы не можете изменить UIImage, так что то, что вы просите, невозможно сделать напрямую.

Однако вы можете зарегистрировать imageView2 в качестве наблюдателя в свойстве image для imageView1y, используя значение ключа, наблюдающее , и когда оно наблюдает изменение, оно устанавливает его изображение таким же, как в imageView1.

// To register for KVO
[imageView1 addObserver: imageView2
             forKeyPath: @"image"
                options: NSKeyValueObservingOptionNew
                context: NULL];

В imageView2 вам понадобится следующее. Вы можете создать подкласс UIImageView или добавить к нему категорию.

// method in imageView2 to deal with observations

- (void)observeValueForKeyPath: (NSString*) keyPath
                      ofObject: (id)object
                        change: (NSDictionary*)change
                       context: (void*) context
{
    if ([keyPath isEqual:@"image"]) 
    {
        [self setImage: [change objectForKey:NSKeyValueChangeNewKey]];
    }
}
...