这是我发现的一个相关问题,但它没有详细回答我的问题。
http://stackoverflow.com/questions/3209993/cocoa-touch-can-i-have-multiple-views-per-view-controller-or-specify-bounds-of
我有一个UIView类BallView,它被设置为ballViewController的默认视图。现在,这个视图有一个球根据加速度计弹来弹去。每次加速度计发送更新时,我都会调用一个私有函数draw。
然而,我的主要问题是:我希望有多个这样的球在周围弹跳。
我必须为每个类重新创建视图吗?但随后还必须连接文件所有者的IBOutlet view。并且IBOutlet只能指向一个地址。
有没有别的办法来解决这个问题?
下面是我如何在ballViewController中实例化Ball View类:
[motionManager startAccelerometerUpdatesToQueue:queue withHandler:
^(CMAccelerometerData *accelerometerData, NSError *error){
[(BallView *)self.view setAcceleration:accelerometerData.acceleration];
[(BallView *)self.view performSelectorOnMainThread:@selector(draw) withObject:nil waitUntilDone:NO];
}];因此,这意味着,我的问题与那些多视图选项卡栏解决方案有点不同。因为在这些情况下,一次只显示一个视图。我想要4-5个视图叠加在一起。
有什么帮助吗?
发布于 2011-04-27 20:11:51
您说得对,视图控制器的view属性中只能有一个UIView。不过,该视图当然可以用来包含其他子视图。
我要做的就是用一个普通的旧UIView作为控制器的view,并让你的BallViews成为该视图的子视图。你的控制器仍然可以控制这些视图,只是它们不能都在它的view属性中。
编辑:如果您使用的是nib文件/接口生成器,将BallView添加为控制器视图的子视图非常简单-只需将UIView对象拖到视图上,然后在标识检查器中,您可以将视图的标识更改为您的BallView类。
如果你不使用IB,你也可以通过编程来做同样的事情:
// BallViewController.h
@interface BallViewController
{
BallView* ballView;
}
@end
// BallViewController.m
@implementation BallViewController
- (void) loadView
{
...
CGRect frame1 = ...
CGRect frame2 = ...
self.view = [[UIView alloc] initWithFrame:frame1];
ballView = [[BallView alloc] initWithFrame:frame2] retain];
[self.view addSubview:ballView];
...
}
@endhttps://stackoverflow.com/questions/5803717
复制相似问题