2009-12-03 2 views
0

지뢰 찾기 클론 게임을 만들었고 30 x 30 격자의 세포를 만들었습니다. 이제는 디자인을 초기화 할 때 각 셀에 UIButton을 사용하여 touchDown 및 touchUpInside를 사용할 계획을 세웠습니다. 하지만 내 문제는 UIButton을 사용하여 게임을 느리게 만들고 UIView에서 각 셀 (900 개)을 추가하거나로드하는 데 특히 속도가 느려집니다.프레임 속도를 향상시키기 위해 UIButton을 대체 할 대상은 무엇입니까?

이제 UIButton 대신 이미지를 사용할 계획이며 쉬운 애니메이션을 위해 CALayer에 대해 들었습니다. 이 CALayer를 구현하거나 UIButton을 대체하는 데 어떻게 사용할 수 있습니까?

감사합니다.

코코아 바탕 화면에서

답변

3

필자는이를 위해 Core Animation 경로를 제안 할 것입니다. NSView 서브 클래스를 사용하여 터치 이벤트를 수신하고 처리 한 다음 터치 위치를 사용하여 적중 된 셀을 계산하고 모델을 적절하게 업데이트 할 수 있습니다.

CALayers를 계층 구조로 정렬하면 뷰 트리의 복잡성이 다른 UI 요소에 따라 달라 지지만 900 개의 하위 레이어가 포함 된 CALayer를 사용할 수 있습니다.

Core Animation을 사용하면 애니메이션으로 어지럽게 볼 수 있습니다.

좀 더 복잡해 지겠지만 총알을 물고 Core Animation 문서에 집착하거나 책을 구입해야합니다.

행운을 빈다.

편집 : Ivan은 hitTest 메시지를 사용하도록 제안합니다. 이 방법을 사용하면 레이어 중 어느 것이 맞았는지 알 수 있습니다. 그 것을 사용하는 것은 분명히 아주 좋습니다. 그러나 속도를 찾고 있다면 그것을 피하고 빨리 해결할 수 있습니다. 이는 게임의 작동 방식 (예 : 버튼/셀이 위치를 이동하지 않음)에 대한 가정을합니다. 기회가 있다면 양쪽 모두 시도해보고 그것이 어떻게 작동하는지 알려주십시오. : o)

+0

솔직히 UIView 대신 CALayers를 사용하여 성능이 크게 향상 될지 의심 스럽습니다. 둘 다 벤치마킹했는데 UIView는 CALayers보다 렌더링 및 애니메이션 속도가 느린 머리 일뿐입니다. UIViews 정말 CALayers 경량 래퍼 있습니다. –

+0

그렇다면 CALayer 기반 터치 처리 예제를보고 싶다면 다양한 렌더링 요소에 대해 CALayers 만 사용하는 Core Plot 프레임 워크를 확인하십시오. http://code.google.com/p/core- 플롯 /. 우리는 잠시 동안 터치 핸들링 코드를 가지고 있었지만, 최근에야 우리가 그것을 사용하기 시작했습니다. –

1

,이 NSButton에 경량 대안 NSCell에가,하지만 그 (그들은 서로없는 충돌을)

하는 사용자 정의 버튼을 만들기 위해의 CALayer 및 코어 애니메이션하기 전에 이전 기술의하는을 만들 커스텀 클래스는 델리게이트 CALayer로 확장됩니다. 그런 다음 어떤 버튼이 클릭되었는지 알기 위해 [hitTest] 메서드를 사용하면 클릭 한 레이어를 효율적으로 반환합니다.

관련 문제