2011-01-30 2 views
2

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

Это код, который вызывает у меня проблемы:

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: Это просто сообщение, которое возвращает FilePath после просмотра в NSBundle и т.д. Выход NSLog является

2011-01-30 22: 09: 54,767 Ribbit [13529: 207] Имя файла:/Пользователи/Поддержка рип/Library/Application/iPhone Simulator/4.2/Применения/C421AA9F-45BB-41AB-8CB0-1540FABB56D3/ribbit.app/cardfront_a7.png

.png существует, и оба часовые не ноль (поэтому не происходит ни прерывания()).

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

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

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

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

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

Я приветствую любые предложения, которые у вас могут быть.

+0

Добро пожаловать в StackOverflow! Престижность для хорошо написанного вопроса. Вернитесь и выберите правильный ответ, когда система позволяет вам. – Moshe

ответ

0

Проблема была связана с setImage (там не было) и opaque = 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.

Смежные вопросы