2013-09-24 1 views
2

뷰에 UIButton의 하위 클래스가 있습니다. iOS 6, 5 등에서 잘 작동합니다. 그러나 iOS 7에서는 setTitle : forState를 사용하여 제목을 변경하려고 할 때 지연이 있음을 알 수 있습니다. 나는 기초가 끊임없이 나의 통제에 layoutSubviews를 부르고 있다는 사실에이 문제를 추적했다. 그리고 이것은 CPU 사용이 앱의 일생 동안 100 % 주위에 공중제비가되게한다.iOS 7에서는 layoutSubviews 메서드가 UIButton 하위 클래스에서 계속 호출됩니다.

내 하위 클래스에서 layoutSubviews를 무시하고 문제를 진단하기 위해 중단 점을 추가했습니다. 백 트레이스는 기초의 [UIView layoutSublayersOfLayer] 메서드에서 호출 된 메서드 만 보여줍니다. 물론,

[super layoutSubviews];

는 CPU 문제가 사라집니다하지만, 다른 문제가 발생 :이 줄을 주석으로 경우 것이

참고.

본 사람이 있습니까? iOS 7이 layoutSubview를 계속 호출하는 이유는 무엇입니까?

+0

몇 가지 코드를 제공해 주시겠습니까? 일반적으로 당신은'layoutSubviews'를 서브 클래 싱하기 때문에 오직 그 메소드를 호출 할 것입니다. 레이아웃을 강제로해야하는 경우 일반적으로 여러 레이아웃 호출을 피하기 위해'setNeedsLayout'을 사용하므로 코드의 다른 부분에 뭔가 문제가있을 수 있습니다. –

+0

고마워, 브라이언. 난 layoutSubviews를 서브 클래 싱하여 CPU pegging을 100 %로 진단했다. 메소드를 주석 처리 할 때 문제는 사라지지 않습니다. – dkmp

+0

같은 맥락에서, 나는 또한 setNeedsLayout을 서브 클래스 화하고, (UButton _beginTitleAnimation) (개인 메소드)에서 호출되고 있다는 것을 발견했다. 나는 버튼에 대한 애니메이션을 비활성화하는 것에 만족할 것이지만, 그렇게 할 수있는 방법을 모른다. – dkmp

답변

4

발견. 내는, setEnabled에서 : 방법 (처음에 서브 클래스에 대한 이유의 일부), 나는 다음과 같은 라인을했다 :

self.titleLabel.alpha = enabled ? 1.0 : 0.8; 

그리고 분명히 아이폰 OS 7

, 이것은 제목 변화 애니메이션을 시작있는 UIButton의 원인을 그 그것을 결코 끝나지 않는다. 결과는 layoutSubviews가 반복적으로 호출되는 무한 루프입니다.

[self setTitleColor:[[self titleColorForState:UIControlStateNormal] colorWithAlphaComponent:0.8] forState:UIControlStateDisabled]; 

그리고 무한 루프 피할된다

수정은 titleColor 변경시이 라인을 포함하도록했다!

관련 문제