8

在 iOS 8 中存在问题或功能。当 MPVolumeView 显示时,它正在被动画化,就像从 0 扩展到它的宽度一样。我该如何解决这种行为?在 iOS 7 上没有这样的问题。

4

2 回答 2

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:)。

于 2015-04-10T13:11:26.073 回答
0

我确认这个问题在 iOS 8 中仍然存在。Anastasia 在上面的评论之一中提供的解决方法(覆盖volumeSliderRectForBounds)似乎有效,但只有在路由按钮不存在时才有效。当它存在时,滑块会与路线按钮重叠,并且不能再被按下。

我对她的解决方案进行了简单的修改,也许有人可以将其用作解决方法,直到 Apple 修复该解决方案或提供更好的解决方案。

- (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;
}

我不喜欢硬编码间隔值,但我找不到如何动态计算它。

于 2015-02-03T11:48:20.057 回答