首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPVolumeView动画问题

MPVolumeView动画问题
EN

Stack Overflow用户
提问于 2015-01-10 16:12:51
回答 2查看 1.1K关注 0票数 6

每次我将MPVolumeView作为子视图添加到UIViewController视图中时,都会有一个快速动画( MPVolumeView从左到右展开),看起来非常奇怪。我在寻找摆脱这个动画的方法,有没有人面临过这个问题?

我几乎接受了这是一个MPVolumeView错误,但后来我注意到苹果肯定在他们的本地音乐应用中使用MPVolumeView,那里没有奇怪的动画.所以我肯定做错了什么。

更新:

代码非常简单,但它是在注释中请求的,如下所示:

代码语言:javascript
复制
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(10.f, 0.f, CGRectGetWidth(self.view.frame) - 20.f, 30.f)];
[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMinimumValueImage:[UIImage imageNamed:@"icon-volumeMin"]];
[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMaximumValueImage:[UIImage imageNamed:@"icon-volumeMax"]];
volumeView.center = CGPointMake(0.5f * CGRectGetWidth(self.view.frame), 0.5f * CGRectGetHeight(self.view.frame));
volumeView.showsRouteButton = NO;
[self.view addSubview:volumeView];

我在github上做了一个非常简单的项目来演示这个问题,但是您必须在一个设备上运行它,因为MPVolumeView没有出现在模拟器上。或者看看这个礼物:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-10 13:11:00

删除此行为的一种可能方法是子类MPVolumeView,并在[super layoutSubviews]之后执行一些额外的工作。

代码语言:javascript
复制
- (void)layoutSubviews
{
    [super layoutSubviews];

    [self xy_recursiveRemoveAnimationsOnView:self];
}

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

这将删除所有插入的动画。所以,要确保这是你想要的,因为这是非常过分的。您也可以删除positionbounds动画(参见removeAnimationForKey:)。

票数 10
EN

Stack Overflow用户

发布于 2015-01-12 16:33:11

我修正了你的演示代码

代码语言:javascript
复制
@implementation F17YViewController {
    MPVolumeView *volumeView;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    volumeView = [[MPVolumeView alloc] init];
    volumeView.showsRouteButton = NO;
    volumeView.hidden = true;
    [[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMinimumValueImage:[UIImage imageNamed:@"icon-volumeMin"]];
    [[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMaximumValueImage:[UIImage imageNamed:@"icon-volumeMax"]];
    [self.view addSubview:volumeView];
}

- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];

    volumeView.frame = CGRectMake(10.f, 0.f, CGRectGetWidth(self.view.frame) - 20.f, 30.f);
    volumeView.center = CGPointMake(0.5f * CGRectGetWidth(self.view.frame), 0.5f * CGRectGetHeight(self.view.frame));
}

- (IBAction)showVolumeView:(id)sender {
    volumeView.hidden = false;
}

您应该在viewWillLayoutSubviews中执行布局调用。

与其用每个按钮按下创建一个新的MPVolumeView,不如在viewDidLoad上创建一个,然后隐藏它,然后在按下按钮时取消隐藏。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27878272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档