如何将 UIImageView 添加到 UIView(不是 UIViewController)?

Posted

技术标签:

【中文标题】如何将 UIImageView 添加到 UIView(不是 UIViewController)?【英文标题】:How to add a UIImageView to a UIView (not a UIViewController)? 【发布时间】:2011-09-20 09:34:22 【问题描述】:

我创建了基于视图的应用程序。 我有一个sampleGameViewContrioller.xib,其中包含主视图和子视图,与行为类连接。

SampleViewController.xib:

查看 查看

在 sampleViewContoller.m 中,我创建了 Behavior 类的实例:

Behavior *b = [[Behavior alloc] initilizeWithType:@"type" position:rect mapArray:arrMap];

行为.m:

 -(id) initilizeWithType:(NSString *)type position:(CGRect) pos mapArray:(NSMutableArray *) mapArr 

 self = [super initWithFrame:CGRectMake(0, 0, 1024, 570)];
 if (self != nil) 
 if ([type isEqualToString:@"type"]) 
 arrMap = mapArr;
 self.rectForDraw = pos;
 self.file = [[NSString alloc]initWithString:@"girl.png"];
 UIImageView *imgg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"girl.png"]];
 imgg.frame = rect;
 [self addSubview:imgg];
 timer = [NSTimer scheduledTimerWithTimeInterval:0.015 target:self selector:@selector(moving:) userInfo:nil repeats:YES];
 
 
 return self; 

但它不起作用。图片未添加到我的视图中。

如果我在 -(void)drawRect:(CGRect) rect 中添加 imageView,它可以工作:

- (void)drawRect:(CGRect)rect 
 self.img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"girl.png"]];
 self.img.frame = CGRectMake(100, 100, 100, 100);
 [self addSubview:self.img]; 

但我应该通过构造函数在 Behavior 类中发送绘图参数。如何使用我的构造函数添加没有方法drawRect的imageView?

对不起我的英语:)

【问题讨论】:

您能否澄清以下几点:在您的视图控制器中创建b 后,您将如何处理它?您在上一个代码 sn-p 中覆盖了哪个 drawRect?这是Behavior 类吗? 我创建了一个类的实例来管理它们中的每一个。类绘制图像并按照自己的逻辑移动它。因此,创建了一个实例数组,每个实例负责移动图像。 >> 您在上一个代码 sn-p 中覆盖了哪个 drawRect?这是行为类吗?是的,在 Behavior 类中。但这只是一个示例 但是b 确实在某些时候被添加为视图控制器视图的子视图?你能显示你正在使用的实际代码吗? 一切正常)你可以在那里看到我的代码示例:file.qip.ru/get/sB1Iq7UX/sample.html 【参考方案1】:

如果您想在简单的 UIView 上添加图像视图,那么只需执行 [self.view addSubview:imageview]; 如果您从 Behavior 类方法获取该图像,则从该方法返回 UIImageView 并将其添加到您的视图 试试这个:

Behavior *b = [[Behavior alloc] init];

然后在Behavior类中写一个方法

-(UIImageView*) initilizeWithType:(NSString *)type position:(CGRect) pos mapArray:(NSMutableArray *) mapArr 
// Your Logic

return  imgView;  //UIImageView object
 

然后在你的视图控制器中调用这个方法

UIImageView *imgView=[b initilizeWithType:@"YOUR STRING" position:YOUR RECT pos mapArray:YOUR ARRAY ];

【讨论】:

消息:“在“行为 *”类型的对象上找不到属性“视图”” 将行为作为 UIView 的子类。或者你可以将方法的返回类型(在行为中)设置为 UIImageView 或者只是做[self addSubView:imageView] -(id)initilizeWithType:(NSString *)type position:(CGRect) pos mapArray:(NSMutableArray *) mapArr UIImageView *imgg; .... return imgg; 不起作用 好吧,正如我已经写过的,[self addSubView:imageView] 也不起作用.. 设置返回类型为 '-(UIImageView *)initilizeWithType:(NSString *)type position:(CGRect) pos mapArray:(NSMutableArray *) mapArr UIImageView *imgg; .... 返回 imgg; '【参考方案2】:
imgg.frame = rect;

这一行将您的 imageView 框架分配给...据我所知,什么都没有。这应该是pos 还是rectForDraw?在 drawRect 中添加视图时,您明确设置了一个真实的框架,因此这可能就是不同之处所在。

【讨论】:

我错了。例如,我写了它。即使我写了'imgg.frame = CGRectmake(100, 100, 100, 100)',图像也不会出现。

以上是关于如何将 UIImageView 添加到 UIView(不是 UIViewController)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIImageView 添加到导航栏的右侧?

如何以编程方式将 UIImageView 添加到 UIStackView(故事板)

如何将覆盖层添加到 UIImageView 但不在图像的透明部分?

如何将 UIImageView 添加到 UIView(不是 UIViewController)?

如何在 UITableView 中实现类似 UIImageView 的延迟加载

如何以编程方式将 UILabel 和 UiImageView 添加到表视图单元格内的 UIView?