2014-09-16 7 views
9

iOS 8에서 문제 또는 기능이 있습니다. MPVolumeView가 표시되면 0에서부터 너비까지 확대되는 것처럼 애니메이션이 적용됩니다. 어떻게 그 문제를 해결할 수 있습니까? iOS 7에는 그런 문제가 없었습니다.iOS 8의 MPVolumeView 애니메이션

+0

그래, 이건 분명히 버그 같아. MPVolumeView 인스턴스가 처음으로 수퍼 뷰에 추가 될 때만 발생합니다. 제거한 다음 다시 추가하면 예상대로 나타납니다. –

+0

며칠 전이 문제에 대해 레이더를 제출했습니다. http://openradar.appspot.com/radar?id=5308200412774400 –

+3

동일한 문제가 있었는데 MPVolumeView를 서브 클래 싱하고 단일 메서드를 오버 라이딩하는 것이 도움이 되었습니까? - (CGRect) volumeSliderRectForBounds : (CGRect) 범위 { 반환 범위; }'. 불행히도 그것은 오히려 해결 방법입니다. 경로 버튼 (예 : airplay 용)을 제시해야한다면 어떻게 작동하는지 확인하지 않았습니다. 다른 한편, 애플은 iOS7 이후 컨트롤 센터에서 발표 되었기 때문에 더 이상이 버튼을 애플 리케이션에 표시하지 않습니다. 따라서이 솔루션은 잘 작동하지 않습니다. – Anastasia

답변

0

이 문제는 iOS 8에 여전히 존재하는 것으로 확인되었습니다. 위의 설명 중 하나 (VolumeSliderRectForBounds 무시)로 Anastasia에서 제공하는 해결 방법은 작동하지만 루트 버튼이 아닌 경우에만 작동하는 것 같습니다. 선물. 슬라이더가있는 경우 슬라이더가 경로 버튼과 겹치고 더 이상 누를 수 없습니다.

그녀의 솔루션을 간단하게 수정했는데, 애플이 해결책을 제시하거나 해결할 때까지 누군가 그것을 해결책으로 사용할 수 있습니다.

- (CGRect)volumeSliderRectForBounds:(CGRect)bounds 
{ 
    if (self.showsRouteButton) { 
     NSInteger spacer = 10; /* Space between Route button and Volume slider */ 
     CGRect routeButtonRect = [self routeButtonRectForBounds:bounds]; 
     bounds.size.width -= (routeButtonRect.size.width + spacer); 
    } 
    return bounds; 
} 

저는 스페이서 값을 하드 코딩하는 것을 좋아하지 않지만 동적으로 계산하는 방법을 찾지 못했습니다.

2

이 동작을 제거하는 한 가지 가능한 방법은 MPVolumeView를 하위 클래스 화하고 [super layoutSubviews] 다음에 몇 가지 추가 작업을 수행하는 것입니다.

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    [self cg_recursiveRemoveAnimationsOnView:self]; 
} 

- (void)cg_recursiveRemoveAnimationsOnView:(UIView *)view 
{ 
    [view.layer removeAllAnimations]; 
    for (UIView *subview in view.subviews) { 
     [self cg_recursiveRemoveAnimationsOnView:subview]; 
    } 
} 

삽입 된 애니메이션이 모두 제거됩니다. 이것이 지나치게 잔인하기 때문에 그것이 당신이 원하는 것임을 확신하십시오. positionbounds 애니메이션을 삭제할 수도 있습니다 (removeAnimationForKey: 참조).

+0

'UIView.performWithoutAnimation'을 사용하지 않는 이유는 무엇입니까? - 훨씬 더 간단합니다. –

+0

'[super layoutSubviews]'를'-performWithoutAnimation'으로 래핑하는 것을 의미합니까? 이것은 애니메이션이 다른 곳에 생성 된 것처럼 보이고 또한 MPVolumeView 내의 모든 레이어가'UIView' 델리게이트를 가지지 않기 때문에 작동하지 않습니다. – CipherCom

+0

귀하의 방법과 비슷한 기능을 수행해야합니다. 그렇지 않은 경우, 애니메이션은 더욱 독특한 CA 애니메이션입니다. –