'터치인식'에 해당되는 글 1건

  1. 2013.04.06 iPhone 특정역역 터치 인식하는 방법

지금 하는 프로젝트 어플에서 특정영역을 터치하면 처리해야 되는 부분이 있다.


처음에는 버튼으로 간단히 해결하려고 했지만... 세상에 쉬운건 없었다.

 그 특정영역이 사각형이 아니라 삼각형. 혹은 다각형 도형이 될수도 있는 상태.

억지로 버튼으로 할 경우 일부분은 터치가 인식할 수 없기 때문에... 뭐 당연하 얘기지만..



그러다면... 무식한 방법이지만 버튼을 오밀조밀 여러개를 배치하여 해결을 할까? 라는 꼼수도 생각해 봤지만 최후에 정말 안될경우에 그렇게 하기로 하고 머리를 굴리기 시작했다.


구글로 검색한 결과  Cocos2d를 이용하는 방법들이 여기저기 소개되어 있긴한데 . 아.. 그런데 이거 하나때문에 그 큰 라이브러리를 써야돼? 라는 조금 거부감이 느껴져 망설이던 차 맥 개발카페에서 어떤분이 해결가능한 메서드를 알려주셨다.


CGPathContainsPoint

Checks whether a point is contained in a graphics path.

bool CGPathContainsPoint (
   CGPathRef path,
   const CGAffineTransform *m,
   CGPoint point,
   bool eoFill
);
터치를 인식하고 싶은 영역을 패스로 연결한 후 이 메소드를 이용하여 판정하면 된다.

물론 Path가 아닌 Rect도 있었다.

CGRectContainsPoint

Returns whether a rectangle contains a specified point.

bool CGRectContainsPoint (
   CGRect rect,
   CGPoint point
);

위에 메소드를 이용해 테스트를 해 보았다.


- (void)viewDidLoad

{

    [super viewDidLoad];

    _cellPath = [self cellPath];    //패스생성

    BOOL b = [self containsPoint:CGPointMake(80, 50)];  //판정

    NSLog(@"%d",b);

}


- (CGPathRef) cellPath

{

    if( ! _cellPath ) {

        CGPoint p[3] = { {0,0}, {100,10}, {100,110}};

        CGMutablePathRef path = CGPathCreateMutable();

        CGPathAddLines(path, NULL, p, 3);

        CGPathCloseSubpath(path);

        _cellPath = path;

    }

    return _cellPath;

}


- (BOOL)containsPoint:(CGPoint)p

{

    return [super containsPoint: p] && CGPathContainsPoint( _cellPath, NULL, p, NO );

}



무사히 잘 되는걸 확인했다. 이젠 소스를 뜯어고치는 일만 남았구나..


Posted by 악당잰 트랙백 0 : 댓글 0

댓글을 달아 주세요