новые созданные UIImageViews не отображаются при добавлении в качестве подвида

после касания я хочу, чтобы несколько объектов UIImageView отображались в нижележащем UIView. Поэтому я создал следующее действие:

- (IBAction)startStars: (id) sender
{
UIView* that = (UIView*) sender;  // an UIButton, invisible, but reacting to Touch Down events
int tag = that.tag;

UIView* page = [self getViewByTag:mPages index:tag];  // getting a page currently being viewed
if ( page != nil )
{

    int i;
    UIImage* image = [UIImage imageNamed:@"some.png"];

    for ( i = 0 ; i < 10 ; ++i )
    {   
        // create a new UIImageView at the position of the tapped UIView
        UIImageView* zap = [[UIImageView alloc] initWithFrame:that.frame];
        // assigning the UIImage
        zap.image = image;

        // make a modification to the position so we can see all instances
        CGPoint start = that.layer.frame.origin;
        start.x += i*20;
        zap.layer.position = start;

        [page addSubview:zap];   // add to the UIView
        [zap setNeedsDisplay];   // please please redraw
        [zap release];           // release, since page will retain zap

    }
    [image release];
}
}

К сожалению, ничего не появляется. Вызывается код, создаются объекты, загружается изображение, даже свойства соответствуют ожиданиям. Сама страница представляет собой реальный базовый UIView, созданный с помощью построителя интерфейса, чтобы содержать другие представления и элементы управления.

Все равно ничего этого не видно....

Кто-нибудь знает, что я делаю неправильно? Нужно ли устанавливать альфа-свойство (или другие)?

Спасибо

Зуппа


person Zuppa    schedule 28.11.2011    source источник
comment
Моя первая мысль: что-то не так в вашей функции getViewByTag:index:. Не могли бы вы опубликовать и это?   -  person Patrick Hernandez    schedule 29.11.2011
comment
Конечно. Так было. Никогда об этом не думал..   -  person Zuppa    schedule 14.04.2012


Ответы (3)


Несколько вещей, которые я бы проверил:

  • Ведение журнала, чтобы убедиться, что этот раздел кода действительно вызывается.
  • Используйте назначенный инициализатор для UIImageView:

    [[UIImageView alloc] initWithImage:image];
    

    Это гарантирует, что ваш новый вид имеет правильный размер для изображения — каковы относительные размеры zap и вашего изображения? Это может быть вне кадра.

  • Убедитесь, что образ действительно существует и создан

  • Попробуйте не настраивать свойства слоя, а вместо этого установить center вида изображения. На самом деле, в первую очередь вообще не настраивайте его, а просто посмотрите, сможете ли вы что-нибудь увидеть. Я не уверен, но думаю, что position может перемещать слой внутри вида, поэтому ваше изображение может быть скрыто из поля зрения. Пытаться:

    CGPoint newCenter = that.frame.origin;
    newCenter.y += zap.bounds.size.height/2;
    newCenter.x += i*20;
    zap.center = origin;
    
  • setNeedsDisplay не требуется. Судя по вашим комментариям, это был акт отчаяния!

person jrturton    schedule 28.11.2011
comment
глупый я, вид, в который я его добавлял, в настоящее время не виден (у меня есть несколько страниц, и вместо страницы 7 это была страница 0, тем не менее ваши ответы дали мне больше информации о теме - person Zuppa; 22.12.2011

Ваш UIImage равен нулю? Вам не нужно иметь расширение .png, чтобы imageNamed: работало. Он может даже не работать правильно, если вы его вставите, я не уверен. Вы также чрезмерно публикуете свой образ. imageNamed: возвращает изображение с автоматическим выпуском, поэтому нет причин вызывать выпуск для изображения, если вы также не вызываете его сохранение где-то.

person Randall    schedule 28.11.2011

Я вижу потенциальную ошибку: при втором вызове вы повторно добавите еще одну копию, поэтому позаботьтесь об удалении подпредставлений перед добавлением новой копии. В качестве альтернативы Ю может переместить предыдущий вид.

99% моих случаев невидимых представлений с изображениями - это неправильные имена, поэтому, как было предложено, загрузите с помощью временной переменной:

UIImage img = [Имя изображения UIImage..];

и тестовое изображение.

person ingconti    schedule 21.01.2012