메서드에서 UIView 크기를 얻으려면 self.bound
을 사용하고 있습니다.drawRect에서 UIView 크기를 얻는 방법
홈페이지 스레드 검사기 : 배경 스레드에서 호출 UI의 API :하지만 지금, 엑스 코드 (9)와,이 경고를 얻을 - [UIView의 경계]
를 얻을 수있는 올바른 방법은 무엇입니까 drawRect
의보기 크기는? 이처럼
메서드에서 UIView 크기를 얻으려면 self.bound
을 사용하고 있습니다.drawRect에서 UIView 크기를 얻는 방법
홈페이지 스레드 검사기 : 배경 스레드에서 호출 UI의 API :하지만 지금, 엑스 코드 (9)와,이 경고를 얻을 - [UIView의 경계]
를 얻을 수있는 올바른 방법은 무엇입니까 drawRect
의보기 크기는? 이처럼
:
override func drawRect(rect: CGRect)
let bds = DispatchQueue.main.sync {
return self.bounds
}
// ....
}
그러나 drawRect
가 첫 번째 장소에서 백그라운드 스레드에서 호출되고 있다는 사실은 나쁜 기호 - 당신은 CATiledLayer 또는 않는 다른 기본 아키텍처를 사용하지 않는 이. 무엇보다 먼저 에 대해 걱정해야합니다..
이보기에서 CATiledLayer를 사용하고 있으므로 drawRect가 백그라운드에서 호출되는 것이 정상입니다. –
좋았어, 내 의견과 내 대답을 보면 그게 내가 너에게 확인을 요구 한 것과 정확히 일치한다! 이 경우, 예, 이것이 문제의 탈출구입니다. 우리가이 모든 일을 잘못하고 있음이 밝혀졌습니다. 이제는 주 스레드 검사기가 와서 우리를 때렸다. 그 가치가 입증되었습니다! – matt
drawRect에서 동기화 작업을 수행하면 도면 속도가 느려질 수 있다고 생각합니까? layoutSubviews를 무시하고 크기를 클래스 멤버로 유지하는 것에 대해 어떻게 생각합니까? –
마침내 문제의 해결책을 발견했습니다. 지금은 클래스 멤버에서보기 경계를 유지하기에 UIView의 layoutSubviews
을 무시하고 : 그 후
- (void)layoutSubviews
{
[super layoutSubviews];
m_SelfBounds = self.bounds;
}
, 난 그냥 drawRect
방법 m_SelfBounds
을 사용하고 있습니다.
주 스레드에서 디스패치를 시도하십시오. – Lumialxk
힌트를 주셔서 감사합니다. 백그라운드 스레드에서 호출되는 이유를 알아 내려고 노력하겠습니다. –