코코아 루비 프로그래밍 7 - 바인딩 (슬라이더 사용법)

Cocoa® Programming for Mac® OS X, Third Edition by Aaron Hillegass Chapter 7. Key-Value Coding 참조

1.새 프로젝트 만들기에서 ”Cocoa-Ruby Application” 을 선택하고 프로젝트 이름은 KVCFun , 최근 발표된 XCODE 3.1 에서 모양이 조금 바뀌었다

2.프로젝터 창의 rb_main.rb 파일에 include OSX 라고 한줄 추가,
3.인터페이스 빌더에서 간단한 뷰를 만들기 위해 XCODE 에서 아래 두 부분중 한곳에서 더블클릭한다.

4. 인터페이스 빌더로 다음과 같은 화면을 만든다

5. 이제 슬라이더를 움직이면 라벨 부분에 슬라이더 위치에 해당하는 숫자가 나타나도록 만들어야한다.

여기서 코코아 의 재미있는 기능을 이용할수있는데 바로 바인딩(Binding) 이다. 만일 자바를 이용한다면 먼저
라벨을 슬라이더의 이벤트 리스너로 등록해야할것이다. 슬라이더를 움직일때마다 이벤트가 발생하고 그 이벤트에 귀기울이고 있는 리스너가 변화를 감지해 숫자를 변경하는것이다. 이런식으로 하는것이 일반적인 방법이었고 리스너부분의 소스 코딩이 필수적이다

코코아는 오브젝티브 C 언어의 동적인 특징을 잘 활용해 바인딩 이란걸 만들었는데 이를 이용하면 리스너 코딩 없이 위의 컨트롤들을 연결할수있다.

6. 먼저 컨트롤러를 만들어야한다. 만들어둔 인터페이스를 저장하고 인터페이스 빌더를 숨긴 다음 ,

XCODE -> File -> New File XCODE 3.1 에서는 아래 그림과 같이 선택해서 Ruby NSObject subclass 를 만든다 이름은 AppController 라 한다.

..

7. 아래와 같이 코딩하고 저장한다

require 'osx/cocoa'

class AppController < OSX::NSObject
attr_accessor :fido

def initialize
@fido = 5
end
end

attr_accessor :fido 는 fido 란 변수를 만들고 , 이를 클래스 외부에서 읽고 쓸수있게 하란 뜻이다.
initialize 메쏘드에서는 fido 의 값을 5 로 초기화 시키고 있다.

8. 이제 인터페이스 빌더로 가서 MainMenu.nib 에 NSObject 를 끌어다 놓고,

인스펙터창에서 AppController 클래스와 연결한다.

9. 슬라이더 를 선택한 다음 , 가질수 있는 값의 범위와 연속성을 위해 두부분의 값을 조정한다.

그리고 바인딩 탭에서 아래와 같이 AppController 클래스의 fido 변수와 슬라이더를 바인딩시킨다.

10. 같은 방법으로 라벨을 AppController 클래스의 fido 변수와 슬라이더를 바인딩시킨다음 인터페이스를 저장하고 XCODE 의 Build & Go 버튼을 눌러 프로그램을 작동시켜보면 아래와 같이 슬라이더를 움직임에 따라 값이 변화할 것이다.

11. 이제 AppController 클래스 를 아래와 같이 코딩하고

require 'osx/cocoa'

class AppController < OSX::NSObject
attr_accessor :fido

def initialize
@fido = 5
end

ib_action :up do
@fido = @fido + 1
puts @fido
end

end

인터페이스 빌더에서 액션과 UP 버튼을 연결한다음

XCODE 의 Build & Go 버튼을 눌러 프로그램 작동 후 바로 버튼을 누르면 변화된 @fido 변수가 찍히지만 슬라이더는 아무 변화가 없고 슬라이더를 먼저 움직인 다음 버튼을 누르면 에러가 난다.

액션부분을 아래와 같이 바꿔주고

ib_action :up do
self.willChangeValueForKey("fido")
@fido = @fido + 1
self.didChangeValueForKey("fido")
end

프로그램 작동후 바로 버튼을 누르면 슬라이더가 움직인다. 슬라이더를 움직였다는 걸 이벤트로 알려주는것이다. 슬라이더를 먼저 움직인 다음 버튼을 누르면 에러가 나는 문제는 아직 해결방법을 모르겠다. 어쩌면 코코아 루비의 한계인지도 모르겠다. 결국 코코아를 오브젝티브 C 언어로 쓰야만 할지도 모르겠다.

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 리스퍼 | 2008/07/16 11:51 | RUBY | 트랙백 | 덧글(0)

트랙백 주소 : http://caar.egloos.com/tb/590613
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶