2010-02-24 3 views
0

내 앱에서 사진을 정렬하는 라이트 테이블을 원합니다. 기본적으로 사진이 많은 거대한보기 일 뿐이며 사진을 드래그 할 수 있습니다. 사진은 겹칠 수 있으며 iPhoto와 같이 눈금에 떨어지지 않습니다.코코아 도움말 : 개체를보기로 사용 하시겠습니까?

모든 사진은 마우스 이벤트에 응답해야합니다. 모든 사진을보기에 적합하게 만들 수 있습니까? 또는보기가 너무 비싸서 만들 수 없습니까? 100 개 이상의 사진을 쉽게 지원하고 싶습니다.

사진은 내가 스택 순서를 변경할 수 있도록뿐만 아니라 층에 있어야합니다. CoreAnimation을이 용도로 사용합니까?

완성 된 소스 코드는 약간의 포인터와 일반적인 아이디어가 필요하지 않습니다. 나는 직접 구현을 이해하려고 노력할 것이다.

FWIW는 난의 Obj-C 2.0 가비지 수집을 사용하여, 10.5 타겟팅.

미리 감사드립니다.

답변

2

당신은 확실히 CALayer 객체를 사용한다. NSImageView 서브 뷰 세트를 사용하면 성능이 현저하게 떨어지게됩니다. 특히 화면에 100 개 이상의 이미지가있는 경우 특히 그렇습니다. 어떤 이유로 Core Animation을 사용하고 싶지 않은 경우 단일 사용자 정의보기를 만들고 모든 이미지 그림을 처리하고 자신을 테스트하는 것이 훨씬 낫습니다. 이것은 많은 NSImageView 객체를 인스턴스화하는 것보다 더 효율적입니다.

그러나 Core Animation 레이어는 각 레이어가 GPU에 버퍼링되어 거의 모든 비용을 들여 레이어를 드래그 할 수 있으므로이 방법보다 성능이 크게 개선 될 것이며 각 이미지를 한 번만 그리면됩니다 보기의 모든 내용이 변경 될 때가 아니라 Core Animation은 레이어 스태킹을 처리합니다.

는 히트 테스트 및 간단한 애니메이션을 포함하여 설명하는 것과 매우 유사한 응용 프로그램을 보여줍니다 우수한 CocoaSlides 샘플 코드에서보세요.

2

가장 간단한 방법은 NSImageViews를 사용하는 것입니다. 쉽게 크기를 조절하고 회전 할 수있는 하위 클래스를 만들 수 있습니다. 더 복잡하지만 시각적으로 우수한 옵션은 Core Animation 레이어 (CALayer)를 사용하는 것입니다.

만큼 당신이 별개의 객체로 사진 표현 (그래서 당신은 개별적으로 조작 할 수 있습니다) 그들이 상관없이 당신이 그들을 표현하는 방법, 메모리 꽤 덩어리를 사용하지 않습니다를 유지한다. 사진에서 사용 가능한 모든 데이터를 제공하면 각각 수십 메가를 쓸 수 있습니다. 특정 사진을 세부적으로 작업 할 때를 제외하고 이미지의 표시 품질, 즉 픽셀 단위의 크기, 충실도 등을 실제로 줄이려고합니다.

는 그들이 모방 물리적 객체처럼 사진을 치료하지 않아도 기억하십시오. 인터페이스에 물리적 인 물체의 환상을 만들어 내기 만하면됩니다. 우리는 극장 무대 디자이너이고 건축가는 아닙니다. 데이터 모델 모델이 당면한 작업에 대해 엄격한 상태를 유지하는 한, 인터페이스는 사용자의 이익을 위해 모든 종류의 환상에 관여 할 수 있습니다.

+0

NSImageViews를 사용하면 모든 사진이 자신의보기가됩니다. 나는 많은 관점을 만드는 것이 비쌀 것이라고 (RAM과 프로세서에서) 어딘가에 읽었다. 사실인가? 사진을 다운 샘플링하여 정상적인 메모리를 사용하도록해야 할 것 같습니다. 맞습니까? 마지막으로 CALayers가 마우스 이벤트에 응답 할 수 있습니까? 아니면 각각의 NSImageView를 자체 CALayer에 넣을까요? 도움 주셔서 감사합니다. – Ron

+0

CALayers를보기와 같은 것으로 사용할 수 있습니다.그것들은 계층 구조에 존재하며 히트에 응답합니다 (뷰와 같이 관리하기위한 과장된 작업이 뷰와 비교하여 더 광범위합니다). CALayers는 전체 이미지를 표시하는 데 많은 메모리를 사용하지 않습니다. . 2 메가의 파일을 가지고있을 때, 뷰와 레이어 사이의 메모리 오버 헤드의 비율은 사소하다. CALayers는 적은 프로세서 시간을 사용합니다. – TechZen

+0

덧붙여 말했듯이, 당신은 단지 전면에 가장 활발한 사진 속에서 만발한 사진의 환상을 만들어야합니다. 배경에있는 사람들은 크기와 해상도를 줄일 수 있습니다. 아마도 어떤 데이터가 표시되어야하는지 정확히 생각하고 어떤 솔루션이 가장 잘 작동하는지 테스트해야합니다. 나는 CALayers가 백그라운드에서 가장 잘 작동하고 뷰가 전경에서 가장 잘 작동한다고 벌금을 부는 것을 상상합니다. 믹스 앤 매치. – TechZen

관련 문제