这是我发现的一个相关问题,但它没有详细回答我的问题。
[http://stackoverflow.com/questions/3209993/cocoa-touch-can-i-have-multiple-views-per-view-controller-or-specify-bounds-of] [1]
我有一个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];
}];
因此,这意味着,我的问题与那些多视图标签栏解决方案有点不同。因为在这些情况下,一次只显示1个视图。我希望4-5个视图叠加在彼此之上。
任何帮助?
答案 0 :(得分:4)
你没错,你的视图控制器只能在UIView
属性中有一个view
。该视图当然可以用于包含其他子视图。
我要做的是让一个普通的UIView
作为您的控制器的view
,并让您的BallViews
成为该视图的子视图。您的控制器仍然可以控制这些视图,它们不能都在view
属性中。
编辑:如果您正在使用nib文件/ Interface Builder,添加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];
...
}
@end