我正在嘗試創建一個由兩組正方形(棋狀網格)組成的可可UI,這些正方形將在底層算法運行時呈現不同的顏色。當算法的執行結束時,UI應該能夠處理點擊,平移和其他手勢。向NSView添加子視圖以獲得像象棋的網格
我迄今爲止的層次是以下的(請檢查附於具體代碼):這是一個窗口控制器
2)拆分視圖與窗口中的主窗口
1)兩個自定義視圖,MAINVIEW和側視(每一個將持有一組平方)
3)兩個視點控制器(mainViewController和sideViewController)
我想能夠加載的平方作爲MAINVIEW的子視圖和sideView。
我想有另一個自定義視圖,說SquareView與另一個nib文件。我的問題是:
a)我該如何創建這個SquareView,以便它可以用來創建將作爲子視圖添加到mainView和sideView以形成類棋格網格的正方形?
b)如何將子視圖添加到mainView和sideView以構建兩個網格?爲了簡單起見,我們假設前面提到的每個視圖都有四個不重疊的正方形。
謝謝!
MainView.m
#import "MainView.h"
@implementation MainView
- (void)drawRect:(NSRect)TheRect
{
[[NSColor grayColor] set];
[NSBezierPath fillRect:[self bounds]];
}
SideView.m
#import "SideView.h"
@implementation MainView
- (void)drawRect:(NSRect)TheRect
{
[[NSColor whiteColor] set];
[NSBezierPath fillRect:[self bounds]];
}
MainWindowController.h
#import <Cocoa/Cocoa.h>
@class SideViewController;
@class MainViewController;
@interface MainWindowController : NSWindowController
{
IBOutlet NSSplitView* oMainSplitView;
SideViewController* sideViewController;
MainViewController* mainViewController;
}
@end
MainWindowController.m
#import "MainWindowController.h"
#import "SideViewController.h"
#import "MainViewController.h"
@implementation MainWindowController
- (void)windowDidLoad
{
sideViewController = [[SideViewController alloc] initWithNibName:@"SideView" bundle:nil];
NSView* splitViewLeftView = [[oMainSplitView subviews] objectAtIndex:0];
NSView* sideView = [sideViewController view];
[sideView setFrame:[splitViewLeftView bounds]];
[sideView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[splitViewLeftView addSubview:sideView];
mainViewController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
NSView* splitViewRightView = [[oMainSplitView subviews] objectAtIndex:1];
NSView* mainView = [mainViewController view];
[mainView setFrame:[splitViewRightView bounds]];
[mainView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[splitViewRightView addSubview:mainView];
}
爲什麼要使用'NSBox'比自定義視圖中的方塊更容易/更好? – trojanfoe
@trojanfoe,我不知道「更好」,但我認爲在IB中做起來更容易,因爲你可以按照你想要的方式佈置它,並且NSBoxes(自定義類型的)給你兩個邊界並填充顏色。最終(對我來說),歸結爲方便(在IB中執行)與在代碼中執行它的靈活性。 – rdelmar
我可能不夠清楚,我對此表示歉意。這個想法是爲每個視圖添加一個正方形網格(mainView和sideView)。算法運行時,每個正方形將呈現不同的顏色。稍後的觸控板手勢將不得不由應用程序處理。我真的不知道要走哪條路。我是否應該有一個正方形的nib文件,該文件將被加載以創建一個子視圖數組?在這種情況下,我需要另一個視圖控制器的子視圖?或者使用NSCollectionView,CALayers,NSBoxes或NSButtons更好?如果我有100多個方格呢?謝謝! – user1352042