Как настроить UIImageView для указания на другой UIImageView - PullRequest
0 голосов
/ 22 октября 2011

Я хочу иметь указатель на представление UIImage, чтобы мне не пришлось много повторять мой код. Мне нужно выбрать изображение в зависимости от того, какая кнопка, но затем в конце я применяю один и тот же код к любой цифре. oneDigit, twoDigit и threeDigit - все @property(nonatomic, retain) в заголовочном файле. Я хочу, чтобы imageView мог указывать на один из этих UIImageViews. Прямо сейчас UIImageViews не удаляются с removeFromSuperview, потому что imageView не указывает на объекты, но создает свой собственный объект ..

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

См. Упрощенный пример ниже:

- (void)viewDidLoad
{   ...
    UIImageView *oneDigit;
    UIImageView *twoDigit;
    UIImageView *threeDigit;
}

-(IBAction)pressButton:(id)sender {
    UIImage *image;
    UIImageView *imageView;
    UIButton *btn = (UIButton*)sender;
    int value = [btn.titleLabel.text intValue];
    switch (value) {
        case 10:
        case 15:
        case 20:
            [twoDigit removeFromSuperview]; //Remove old image from screen
            imageView = twoDigit; //Update imageView pointer for current case
            image = [UIImage imageNamed:@"twoDigit.png"];
            break;
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            [oneDigit removeFromSuperview];
            imageView = oneDigit;
            image = [UIImage imageNamed:@"oneDigit.png"];
            break;
        case 100:
        case 200:
        case 300:
            [threeDigit removeFromSuperview];
            imageView = threeDigit;
            image = [UIImage imageNamed:@"threeDigit.png"];
            break;
        default:
            break;
    }
    CGPoint point = btn.frame.origin;
    CGFloat xposition = point.x - ((image.size.width - btn.frame.size.width) /2);
    CGFloat yposition = point.y - ((image.size.height - btn.frame.size.height) /2);
    imageView = [ [ UIImageView alloc ] initWithFrame:CGRectMake(xposition, yposition, image.size.width, image.size.height) ];
    imageView.image = image;
    imageView.contentMode = UIViewContentModeCenter;
    [self.view addSubview:imageView];
}

1 Ответ

0 голосов
/ 22 октября 2011

Предполагая, что oneDigit, twoDigit и threeDigit являются UIImageViews, вы можете просто сделать что-то похожее на

imageView = oneDigit;

Поскольку оба являются указателями, установка imageView в oneDigit просто укажет imageView на местоположение oneDigit.Когда вы устанавливаете его на новое изображение, не запускайте его сначала автоматически, потому что, если он установлен, например, на ThreeDigit, он тоже автоматически выпустит ThreeDigit.

Кроме того, вам не нужно устанавливать свойство imageimageView вручную после установки imageView к новому изображению, потому что оно по существу ссылается на точно такой же UIImageView с тем же изображением;это просто под другим именем.

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