2010-12-08 3 views
0

iOS의 원본 사진 응용 프로그램과 유사한보기를 구현할 것입니다.UITableViewCell (iPhone)의 UIButton에 대한 까다로운 성능 문제

4 UIButton이있는 사용자 지정된 UITableViewCell을 만들었습니다. 그리고 셀의 이미지 배열이 바뀌면 버튼의 이미지를 업데이트합니다.

나는 정말 만족스러운 성능을 얻기 위해 열심히 노력했다. 그러나, 그것에 대해 까다로운 지연 문제를 발견했습니다.

내 앱을 정상적으로 사용할 때 스크롤링은 중요한 지체없이 매우 부드럽습니다. 하지만 앱 (시뮬레이터)을 "썸네일 그리드 뷰"에서 실행하고 Mac OS의 다른 응용 프로그램으로 전환하면됩니다. 잠시 후 (약 1 분) 시뮬레이터로 다시 전환하면 스크롤보기가 멈추게됩니다. 스크롤하기가 어렵습니다. 다른 뷰로 전환 한 다음 다시 전환하면 모든 것이 부드럽게됩니다. 너무 까다 롭습니다.

격자보기를 구현하기 위해 three20을 사용하는 TTRemoteExamples도 시도했습니다. Mac OS (iOS가 아닌)에서 다른 응용 프로그램간에 전환 한 후에도 멈 춥니 다.

그런 다음 사용자 지정 셀을 UIButton으로 채우지 않았지만 4 개 이미지로 채 웠습니다. 그것은 붙어 있지 않았다. 어쩌면 이유는 UITableViewCell과 UIButton 사이의 충돌에있다?

시뮬레이터에서만 발생하거나 성능 문제가 있을지 모르겠다. (테스트 할 장치가 없다).

애플의 사진 응용 프로그램은 절대로 이렇게되지 않을 것입니다.

그래서 UITcrollView에서 직접 구현하여 문제가 UITableView의 메커니즘에 의해 발생하는지 확인하려고합니다. 나는 누군가가 그것에 와서 그것을 해결했을 때 여전히 그 이유를 알고 싶다.

내 가난한 영어로 죄송합니다. 제 뜻대로 받아 들일 수 있기를 바랍니다.

답변

0

이 에 Subclassing UITableViewCell 섹션을 참조하면, 는 드디어 UITableViewCell에 하위 뷰를 추가하지 않고, 가이드의 방식을 흉내 내 사용자 정의를 구현하여 문제를 해결했다.

분명히, 너무 많은 서브 뷰를 추가하고, 비록 내 코드에서 4 개만, 위에서 언급 한 이상한 문제를 일으켰습니다. 따라서 UITableViewCell 또는 UITableViewCell 자체의 contentView에 UWmageView가 포함 된 서브 뷰을 절대 추가 할 필요가 없습니다.

대신에 데이터를 사용자 설정 UITableViewCell에 보관하고 -[UIImage drawAtPoint:]-[NSString drawAtPoint:withFont:]을 사용하여 모든 도면 관련 작업을 drawRect에 수행하십시오.

사실, Apple 가이드가이를 언급했습니다. 그 부분을 감추고있는 것이 부주의합니다.

그러나 내가 언급 한 것처럼 MacOS에서 응용 프로그램간에 전환 할 때만 발생합니다. iOS가 아닌 이유에 대해 궁금합니다. 나는 그 이유를 정말로 모른다.

+0

을 편집합니다. touchesBegan : withEvent :'에서 터치 이벤트를 잡아서'[event locationInView : theView] '를 사용하여 계산으로 어떤 그리드를 눌렀는지 파악하십시오. –

+0

사실 불투명하지 않은 하위 뷰를 추가하려고하지 않는 한 사용자 지정 그리기가 필요하지 않습니다. 불투명 한 하위보기를 추가하면 많은 성능 문제가 크게 최소화됩니다. – jer

+0

그래, 나는 모든 subviews 불투명으로 설정합니까, 성능이 나쁘지 않습니다. 내가 만난 문제는 항상 거기에있는 것이 아니기 때문에 설명하기가 어렵습니다. 어쩌면 내가 언급 한 'TTRemoteExamples'를 실행하고 내가 말했던 것을하려고 할 수 있습니다 ('그리드 목록 이미지보기 '에 머물러 있고 시뮬레이터와 다른 응용 프로그램 사이를 전환하고 다시 전환하기 전에 잠시 기다려주십시오). 그러면 지연이 발생할 수 있습니다. –

2

누가 시뮬레이터가 심각하게 신경 쓰는지. 그것이 세계의 금융 시스템을 납치하여 그것이 붕괴의 세계로 들어가게하는 마술적인 악마 요정을 방치하게하십시오 ... 아 잠깐, 아마 이미 그렇게했습니다.

심각하게 생각하면 AQGridView과 같은 코드를 사용하십시오. 매우 안정적이며, 테이블 뷰와 매우 흡사 한 인터페이스를 제공하며, 많은 프로젝트에서 사용됩니다. 당신은 또한이 길로가는 Three20 인 넌센스를 피합니다. 윈 - 윈입니다.

항상 기억하라. 항상 앱에서 장치에서 수행하는 작업에 신경 써야한다. 시뮬레이터에서 똑같은 작업을 수행하지 않는다면 걱정하지 마라. 테스트하지 말아야한다. 어쨌든 시뮬레이션의 99 %. 사용자는 시뮬레이터가 아닌 기기에서 앱과 상호 작용합니다. :)

+0

답해 주셔서 감사합니다. 사실, 나는 수평 스크롤을하고 있지 않다. 사진 앱의 '사진 목록'보기와 같은 '그리드보기'를 구현하고 있지만 가로 스크롤을 사용하면 한 장의 사진보기를 사용할 수 없습니다. –

+0

아,이 경우 – jer