Динамически создаваемые UIImageViews на iPhone не отображаются - PullRequest
2 голосов
/ 31 января 2011

Я достиг головного убора, пытаясь динамически создать UIImageView в iOS 4.2.

Это код, который доставляет мне неприятности:

1) Настройка

UIImageView *iview = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 95, 149)];
iview.tag = 200; // see note 1
iview.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
[self.view addSubview:iview];
[iview release];

Я пытался выпустить и не выпускать iview.

2) Выплата

NSString *img = ...[see note 2];
NSLog(@"Filename: %@", img);

UIImageView *pIV = (UIImageView *)[self.view viewWithTag:200];
if (pIV == nil) {
    abort();
}

UIImage *pI = [UIImage imageWithContentsOfFile:img];
if (pI == nil) {
    abort();
}
[pIV setImage:pI];

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

Примечание 1: Большинство из вышеуказанных жестко закодированных значений (200, границы кадра и т. Д.) Либо #defines, либо вычисляются в forloop, в котором находится код выделения iview. Оставьте для краткости, но дайте мне знать, если вы думаете, что это полезно.

Примечание 2: Это просто сообщение, которое возвращает путь к файлу после просмотра в NSBundle и т. Д. Вывод NSLog равен

2011-01-30 22: 09: 54.767 ribbit [13529: 207] Имя файла: / Users / rip / Библиотека / Поддержка приложений / iPhone Simulator / 4.2 / Applications / C421AA9F-45BB-41AB-8CB0-1540FABB56D3 / ribbit. app / cardfront_a7.png

.png существует, и оба стража не равны нулю (поэтому не может произойти abort ()).

Я убежден, что это просто нечто базовое.

Вещи, которые я пробовал:

1) Используется IB для генерации UIImageView. Когда он был подключен правильно, я мог видеть рамку, и показывалось изображение, которое было задано по умолчанию в IB. Однако я все еще не мог изменить изображение, поэтому я перешел к их динамическому созданию ... думал, что это будет проще. Eh.

2) Пробовал использовать переменные экземпляра для различных iviews, но это было громоздко (генерируется десять таких UIImageView), и они тоже не работали.

Поскольку все три попытки потерпели неудачу с одинаковым поведением (работает нормально, просто не вижу изображения), я предполагаю, что это просто какая-то глупая мелочь.

Я приветствую любые ваши предложения.

1 Ответ

0 голосов
/ 31 января 2011

Проблема, по-видимому, связана с setImage (не было) и непрозрачным = YES.

Я предварительно создавал UIImageViews, а затем загружал их с изображением лениво, по мере необходимости, поэтому setImage не было в приведенных выше примерах кода. Теперь я делаю, и, кажется, работает:

for (int i = 0; i < CARDS_AND_ARROWS; i++) {
    float x = (float)(67 + ((95 + 22) * i));
    UIImageView *iview = [[UIImageView alloc] 
        initWithFrame:CGRectMake(x, 20.0f, 95.0f, 149.0f)];
    [iview setImage:[UIImage imageNamed:@"cardback_a.png"]];
    iview.opaque = YES;
    iview.tag = UPPER_IMG_TAG_0+i;
    iview.autoresizingMask = arm;
    iview.hidden = NO; /* change to YES for distribution */
    [self addSubview:iview];
    [iview release];
}

Как только я добавил их, появились карты. Возможно, проблема не была / не / была загружена или отображена, скорее это была проблема видимости.

Во всяком случае, fuggedaboutit.

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