implementing iPhone custom slider (using cocos2d-iphone)

iphone 프로그램에 사용할 수 있는 커스텀 슬라이더를 만들어 보았다.
아래는 실행화면이다.
화면처럼 정수값에 달라붙는 Descrete 한 방식, 또는 Continuous 하게 움직이는 방식으로 사용할 수 있다.



일단 cocos2d-iphone 이 있어야한다.

-cocos2d 에서 MenuItem 은 누를수 있는 메뉴항목이며 Menu 는 이를 담는 상자다.
이 두 클래스를 서브클래싱한다.

MenuTouch 클래스
-원래 MenuItem 은 드래그할 수 기능이 없다. 먼저 Menu 를 서브클래싱해서 드래그가 발생할때 이 상자가 담고있는
MenuItem 항목에 알릴수 있도록 한다.
여기서
- (BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (BOOL)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- (BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
를 재정의하고 현재 드래그되고 있는 항목에 현재 터치된 좌표를 넘겨준다.

(첨부의 MeunTouch 클래스 코드 참고)

MenuItemDraggable 클래스
- 슬라이더의 버튼은 이미지를 사용할 것이므로 이번에는 MenuItem 의 서브클래스인 MenuItemImage 를 서브클래싱
한다.
MenuTouch 로부터 좌표를 넘겨받아 메뉴항목의 위치를 갱신하는
-(void) processTouchesPoint :(CGPoint) touchesPoint;

슬라이더관련 파라메터를 초기화하는
-(void) initSliderParamWidth :(int) widthVal Minvalue:(int) minVal maxValue:(int)maxVal slidingDirection:(SliderDirection)dir slidingProgress:(SliderProgress)prog originPoint:(CGPoint)origin ;

슬라이더값이 변하면 받는 콜백은 MenuItem 과 동일하게 사용한다.
(첨부의 MeunItemDraggable 클래스 코드 참고)

사용법

쉽게 생각해서 기존의 Menu 대신 MenuTouch 를 쓰고 MenuItemImage 대신에 MenuItemDraggable 을 사용하면 된다.

Layer 안에서
    
        //기존 MenuItemImage 의 초기화 함수를 부르고
        sliderBtn = [MenuItemDraggable 
                        itemFromNormalImage:@"slider_button.png"
                        selectedImage:@"slider_button_on.png"
                        target:self
                        selector:@selector(sliderOnChange:)];
        //추가로 슬라이더 관련 초기화 함수를 부른 후
        [sliderBtn initSliderParamWidth:425-55 //슬라이더가 움직일수 있는 넓이
                    Minvalue:1  //슬라이더의 최소값
                    maxValue:8 //슬라이더의 최대값
                    slidingDirection:kHorizontal //수평,또는 수직 슬라이더 지정
                    slidingProgress:kDescrete //슬라이더가 Countinuous 하게 움직일지, 정수값에 자석처럼 달라붙는지를 지정
                    originPoint:cpv(55,172)]; //슬라이더의 최초위치 좌표값(최소값)
       
        //원래 방식대로 메뉴에 붙이면 끝.
        MenuTouch *menu = [MenuTouch menuWithItems:sliderBtn,nil];
        menu.position = cpvzero;
       
        [self addChild:menu];




classes.zip

2009-04-27_2101.swf

by 채팅신동 | 2009/04/27 21:54 | 컴퓨터 | 트랙백 | 덧글(0)

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

:         :

:

비공개 덧글

<< 이전 페이지     다음 페이지 >>