новые созданные UIImageViews не отображаются при добавлении в качестве подпредставления - PullRequest
0 голосов
/ 29 ноября 2011

после нажатия я хочу, чтобы несколько объектов 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, созданный с помощью конструктора интерфейсов для других представлений и элементов управления.

Тем не менее, ничего из этого не видно ....

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

Спасибо

Zuppa

Ответы [ 3 ]

1 голос
/ 29 ноября 2011

Я бы проверил пару вещей:

  • Ведение журнала, чтобы убедиться, что этот раздел кода действительно вызывается.
  • Используйте назначенный инициализатор для 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 не требуется. Очевидно из ваших комментариев это был акт отчаяния!

0 голосов
/ 21 января 2012

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

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

UIImage img = [UIImage imageNamed ..];

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

0 голосов
/ 29 ноября 2011

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

...