0

코코아 및 뷰 다시 그리기 계층에 문제가 있습니다.isOpaque가 부모 drawRect로 전달되는 것을 멈추지 않습니다

저는 현재 미터 스타일 컨트롤에 (오디오) 레벨을 테스트하고 있으며 Apple의 MatrixMixerTest 예제 프로젝트의 MeteringView 클래스를 사용하고 있습니다. 이 클래스는 미터를 그리며 매우 효율적인 클래스처럼 보이는 변경된 부분 만 드로잉합니다.

내 프로젝트는 2 개의 splitview로 분할됩니다. 일부는 NSCollectionViews (Scrollview, Clipview)이고 다른 일부는 정적 뷰입니다. 이러한 정적 뷰에 미터를 추가하면 setNeedsDisplay : YES를 호출 할 때 제대로 작동합니다. 미터가 CollectionView Item의 뷰에 추가되면 렌더링되지만 가져온 "이전 수준"부분과 모서리/배경이 손실됩니다. 콜렉션 뷰 항목도 다시 그려지기 때문에 (백그라운드 이미지가 있음) 모든 것이 사라 졌다고 생각합니다. 현재 변화하고있는 부분 (도면이 작동하는 부분)을 그리는 중입니다.

항목 자체가 다시 그려지는 것을 방지하는 방법이 있습니까? 또는 정적 뷰에서 왜 그런 현상이 일어나지 않는지는 알지 못합니다. 이러한 뷰에는 배경 이미지가 있지만 미터 위에 그리지 않기 때문입니다.

"일반적인"보기보다 CollectionView에서 다른 트릭이나 다른 점이 있습니까?

편집 : isOpaque (MeteringView isOpaque = YES)에 대한 내용을 읽은 후에는 yes로 설정하면 부모보기 drawRect를 호출하면 안됩니다. 글쎄 정적 뷰를 작동합니다, 그 MeteringViews 부모 drawRect 호출하지 않지만 CollectionView있는 그들은 않습니다. 나는 이유를 모른다.

EDIT 2 : MeteringView의 isOpaque = YES가 CollectionView에서 부모 drawRect를 호출하는 것을 중지하지 않았기 때문에이 제목에 다른 제목이 추가되었습니다. 정상적인보기에서 작동합니다. 거기에 대해 알아야 할 것이 있습니까? thats 문제가 있기 때문에 나는 CollectionView 항목을 다시 그려야합니다. 사전들에서

덕분에

벤자민

답변

0

isOpaque은 시스템에 암시되어있다. 다른 뷰가 내용을 그리는 것을 막지는 못하지만 다른 뷰가 내용을 업데이트하는 것을 건너 뛸 수 있다는 것을 의미합니다.

보기가 불투명 할 경우 불투명 해지고 경계가 완전히 채워야합니다.

+0

내 상황에 대해 좀 더 자세히 알려면 : 나는 오디오 레벨을 받고있는 타이머를 가지고 미터링을 그리는 MeteringView로 설정합니다. MeteringView isOpaque입니다. 그러나 MeteringView가 CollectionViewItem View의 하위 뷰인 경우 CollectionViewItem의 drawRect를 호출합니다. 아이템의 drawRect에있는 NSLog가 타이머로 해고되기 때문에 이것을 알고 있습니다. 그리고 아이템의 뷰는 멀티 미터 자체 뒤에 호출되기 때문에 멀티 미터를 통해 배경 이미지를 다시 그립니다. 그러면 미터가 바로 그 순간입니다. 이 문제를 해결하는 방법을 모르겠습니다. – bennibeef

+0

MeteringView가 셀의 하위 뷰인 경우 셀의 drawRect가 먼저 호출 된 다음 MeteringView의 drawRect가 호출됩니다. –

+0

방금 ​​테스트 한 결과 CollectionViewItem이 먼저 호출 된 다음 Meterings Subview가 호출되었습니다. 음, 이것을 방지 할 방법이 있습니까? 왜냐하면 셀/아이템을 다시 그리기를 원하지 않기 때문에 이것 역시 성능에 영향을 미친다 고 생각합니다. MeteringView에서 코드를 다시 그리지 만 전체 항목/셀은 다시 표시하지 않으려합니다. – bennibeef

관련 문제