我有一个包含多个 SKScene 的应用程序。为了让它保持敏捷,我有一个 UIViewController,它可以处理 1 个 SKView。
我正在尝试将 UICollectionView 添加到其中一个 SKScene 中。但是,当我尝试将集合视图的委托设置为初始化它的 SKScene 时,问题就来了。
我在这里初始化它:
- (id)initWithSize:(CGSize)size
{
if (self = [super initWithSize:size]) {
//Initialise collectionView
UICollectionViewLayout *layout = [[UICollectionViewLayout alloc] init];
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height) collectionViewLayout:layout];
_collectionView.delegate = self;
_collectionView.dataSource = self;
[_collectionView setBackgroundColor:[UIColor redColor]];
}
return self;
}
初始化后,我通过调用将集合视图添加为 UIViewController 视图的子视图:
- (void)didMoveToView:(SKView *)view
{
[self.view addSubview:_collectionView];
}
但是不会调用委托或数据源方法。我已经设置了标题:
@interface BrowseScene : SKScene <UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
我猜测尽管将 self 设置为委托,但一旦添加了集合视图,它就会被添加为 UIViewController 的 SKView 的子视图,因此没有对初始化它的 SKScene 的引用。我试着打电话:
_collectionView.delegate = self.view.scene;
但是我收到一个编译器错误,说 SKScene 是 UICollectionViewDelegate 的不兼容类型。
所以我的问题是,如何最好地解决这个问题?