TWUI를 활용하여 작업하고 있는데,
위와 같이 View가 깨지는 상황이 발생했습니다.
해결하고 보니, 참 우습군요 ;ㅂ;

TUITableView 를 사용하고 있는데,
TUITableView에서 Row Count 가 0 인경우 즉 아무것도 그리지 않는 경우에 위와 같은 현상이 발생하였습니다.

그래서

    tableView.backgroundColor = [TUIColor colorWithWhite:0.9 alpha:1.0];

 
BackgroundColor를 지정해주고 나니, BOOM!

 
잘 나옵니다.

TWUI Framework의 view들은 default로 아무것도 그리지 않기에,
view hierachy 상에 아무것도 그리지 않는 곳이 생긴다면 위와같이 View가 깨져버리는 현상이 나타납니다. -_-

혹시 사용하시는 분이 있다면 삽질 하지 마시길 바랍니다 :)
 

일전에 소개 해드린 TWUI를 살짝 분석한걸 얘기해볼까 합니다.

http://taehoonkoo.tistory.com/190

아래 코드는 TWUI Sample에서 긁어온 소스입니다.


TUINSView *tuiTableViewContainer = [[TUINSView alloc] initWithFrame:b];

[tableViewWindow setContentView:tuiTableViewContainer];

[tuiTableViewContainer release];

ExampleView *tableExample = [[ExampleView alloc] initWithFrame:b];

tuiTableViewContainer.rootView = tableExample;

[tableExample release];



현재 TUINSView와 ExampleView Class 의 Object를 생성하고 있는데,
여기서 ExampleView 는 TUIView 의 sub Class 입니다.

그럼 말하고자 하는 TUINSView 와 TUIView 의 object들인 셈이죠.

결론 부터 말하고 넘어가면, TUIView는 NSView의 sub class 가 아닙니다.
NSResponder의 SubClass 입니다.

이말인 즉슨, NSView에 바로 addSubView해서 사용할수 없는것이죠.

그래서 TUINSView라는 녀석이 있고, 이녀석이 Container역할을 해서
NSView와 TUIView 를 연결 시켜 주게 됩니다.

구현체를 좀더 살펴보니,
TUIView 가 가지고 있는  CALayer Object를 TUINSView의 layer에 addSubLayer하는 형식으로 되어 있습니다.
iOS 스타의 Animation을 구현하기 위해서, NSView자체보다 CALayer를 사용한 것같은데..
직관성이 상당히 떨어 지는 군요.
NSView를 subclassing 하고, 해당 NSView의 CALayer를 활용하는 방식도 가능했을텐데.. 말이지요.

"왜 이런 구조 여야만 했는가? " 에 대한 질문은 아직 깊이있게 살펴보지 않아서,.. ㅎㅎ
좀더 알게 되면 Posting하도록 하겠습니다.






 


twui 는 Twitter 에서 제공하는 Open Source UI Framework 입니다.
Twitter사에서 밝히고 있듯이, iOS Framework 에서 영감을 얻은 즉 iOS Component를 Mac 환경에서 사용할 수 있도록
구현해 놓은 녀석입니다.

위의 예제 이미지를 봐도 UITableView와 매우 흡사합니다. 


아직 Code를 자세히 살펴보진 않았지만,  Code 목록을 보면..
TUITableView, TUITextField 등 iOS의 UIKit에 있는 녀석들과 비슷 한녀석들이 많습니다.

TUITableViewDelegate Protocol도 UITableViewDelegate Protocol 과 매우 유사합니다.


- (void)tableView:(TUITableView *)tableView willDisplayCell:(TUITableViewCell *)cell forRowAtIndexPath:(TUIFastIndexPath *)indexPath; // called after the cell's frame has been set but before it's added as a subview

- (void)tableView:(TUITableView *)tableView didSelectRowAtIndexPath:(TUIFastIndexPath *)indexPath; // happens on left/right mouse down, key up/down

- (void)tableView:(TUITableView *)tableView didDeselectRowAtIndexPath:(TUIFastIndexPath *)indexPath;

- (void)tableView:(TUITableView *)tableView didClickRowAtIndexPath:(TUIFastIndexPath *)indexPath withEvent:(NSEvent *)event; // happens on left/right mouse up (can look at clickCount)


- (BOOL)tableView:(TUITableView*)tableView shouldSelectRowAtIndexPath:(TUIFastIndexPath*)indexPath forEvent:(NSEvent*)event; // YES, if not implemented

- (NSMenu *)tableView:(TUITableView *)tableView menuForRowAtIndexPath:(TUIFastIndexPath *)indexPath withEvent:(NSEvent *)event;



지금 진행하고 있는 Project에 한번 써볼 요량입니다. ㅎㅎ
자세한 내용은 이래저래 좀 더 만져보고 알려드리겠습니다 :)

# Project Page

https://github.com/twitter/twui

# License

Apache License 2.0 을 따릅니다.

한글 번역 자료 : http://yesarang.tistory.com/272 
 

+ Recent posts