以编程方式从另一个类显示UIImageView属性

时间:2011-10-31 21:10:53

标签: objective-c properties uiimageview nsmutablearray

嗯,这是情况: 我有......

  • 具有UIImageView - 属性的自定义类,我们称之为Enemy - 类
  • a ViewController
  • NSMutableArray以帮助创建Enemy的多个实例(称为enemies

和我想要的:

  • 能够通过Enemy中的方法创建无限量的ViewController - 实例(例如[self spawnEnemy];,其中selfViewController
  • 然后,在我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];

enemyTestMethod也正在执行。

但是,屏幕上还没有显示enemieView ... 我做错了什么?

非常感谢你的帮助和时间。

====编辑====

以下是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 :(得分:0)

您没有在Enemy中包含您分配/初始化UIImageView属性的代码。除非此代码明确指定了CGRect所需的sizeorigin,否则视图将使用CGRectZero初始化,这意味着即使您正确添加了子视图(它看起来像你),你仍然不会在任何地方看到它。

发布Enemy代码,问题可能会立即显现出来。

答案 1 :(得分:0)

在将它们添加到视图之前,您是否调用了-createEnemy?

好的,你已经检查了这个。

那么也许你应该检查@MusiGenesis建议。

为此,您需要检查敌人图像的属性。

您可以通过以下任一方式执行此操作:

  1. 通过以下方式打印其frame.size:

    NSLog(@“enemyImage帧大小:%@”,NSStringFromCGRect(enemy.enemyImage));

  2. 设置一个感觉良好的断点,并检查调试器:

    p(CGRect)[[敌人的敌人图像]框架]