Отображение свойства UIImageView из другого класса программно - PullRequest
1 голос
/ 01 ноября 2011

Ну, вот ситуация: У меня есть ...

  • пользовательский класс с UIImageView -свойством, назовем его Enemy -класс
  • a ViewController
  • a NSMutableArray, чтобы помочь создать несколько экземпляров Enemy (называемых enemies)

и что я хочу:

  • сможет создавать неограниченное количество Enemy -инстанций с помощью метода в моем ViewController (например, [self spawnEnemy];, где self - это ViewController)
  • и, впоследствии, отобразить свойство UIImageView (назовем его "enemyImage") на view, которое контролируется моим ViewController

Я пробовал что-то вроде этого:

-(Enemy *) spawnEnemy
 {
   Enemy *tempEnemy = [Enemy new];
   [enemies addObject:(Enemy*)tempEnemy];
   [self.view addSubview:(UIImageView*)[[enemies objectAtIndex:[enemies count]] enemyImage]];

   //randomLocation is declared in the Enemy-Class and just assigns a random 
   //CGPoint to self.enemyImage.center 
   [[enemies objectAtIndex:[enemies count]] randomLocation];

   return [[enemies objectAtIndex:[enemies count]]createEnemy];
 }

Это работает без ошибок, randomLocation вызывается (пробовал с NSLog), И если я делаю что-то подобное в другом методе ViewController:

[[self spawnEnemy] enemyTestMethod];

ВрагТестМетод также выполняется.

Но, тем не менее, enemieView s не отображаются на экране ... Что я делаю не так?

Большое спасибо за вашу помощь и время.

==== Редактировать ====

Вот соответствующий код от Enemy.h / Enemy.m:

@interface Enemy : NSObject
{
    UIImageView *enemyImage;   
}

@property (nonatomic, retain) IBOutlet UIImageView *enemyImage;

-(Enemy*) createEnemy;

//Enemy.m

@implementation Enemy

@synthesize enemyImage, speed;

-(Enemy *) createEnemy
{
    self.enemyImage = [[UIImageView alloc] init];
    [self.enemyImage setImage:[UIImage imageNamed:@"enemy.png"]];
    return self;
}

Я также исправил последнюю строку в методе spawnEnemy для правильной отправки createEnemy.

Ответы [ 2 ]

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

Вы вызывали -createEnemy до того, как добавили их в свой просмотр?

ОК, вы отметили это.

Тогда, возможно, вам следует проверить, как предложено @MusiGenesis.

Для этого вам необходимо проверить свойства вашего вражеского изображения.

Вы можете сделать это одним из следующих способов:

  1. распечатать свой кадр. Размер:

    NSLog (@ "размер кадра вражеского изображения:% @", NSStringFromCGRect (врага.enemyImage));

  2. установите точку останова, где вы чувствуете себя прекрасно, и проверьте с помощью отладчика:

    p (CGRect) [кадр вражеского врага]

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

Вы не включаете код в Enemy, где вы выделяете / инициализируете свойство UIImageView.Если этот код явно не указывает CGRect с size и origin, которые вы хотите, представление будет инициализировано с CGRectZero, что означает, что даже если вы правильно добавляете подпредставление (и похоже, что вы) вы все равно его нигде не увидите.

Отправьте код Enemy, и проблема, вероятно, сразу станет очевидной.

...