UINavigationItem titleView动画

时间:2015-04-12 18:52:31

标签: ios objective-c animation uiimageview titleview

我正在使用基于UIImageView的动画来显示自定义活动指示器。 以下代码负责设置:

+ (void)startLoadingActivity:(UIViewController *)vc {
    vc.parentViewController.navigationItem.titleView = [UIImageView imageViewWithPath:@"loading_" count:10 duration:1.3 frame:CGRectMake(0, 0, 22, 22)];
}

以下是UIImageView+Animation类别的要点。

每当我启动Web请求时,我都会启动活动指示器,每当请求完成时,我都会通过将titleView属性设置为nil来停止它。

结果如下:

OK

请求方法也被调用到视图控制器的-viewDidAppear:方法中。

但是,每当动画在转换期间开始时,UIImageView的位置似乎都是错误的。

以下结果显示问题:

请注意活动指标如何显示在"群组"按钮。

KO

这个问题来自哪里?我该如何解决?

2 个答案:

答案 0 :(得分:0)

我认为问题是虽然你将titleView设置为nil,但你不会从视图中删除加载器,所以它的框架会转到(0,0)位置。

尝试以下方法:

+ (void)startLoadingActivity:(UIViewController *)vc {
    UIImageView *imageView = [UIImageView imageViewWithPath:@"loading_" count:10 duration:1.3 frame:CGRectMake(0, 0, 22, 22)];
    imageView.tag = 999;
    vc.parentViewController.navigationItem.titleView = imageView;
}

每当设置

titleView = nil

也做

[[self.navigationController.view viewWithTag:999] removeFromSuperView];

答案 1 :(得分:0)

这个问题是这个问题非常好的演示,答案如下: Stackoverflow title moves while push/pop of viewcontroller

长话短说:

  1. 将UIView与-fms-extensions
  2. 一起使用
  3. 不要在" viewWillAppear:" (在DidAppear或更高版本的viewDidLoad / update中执行)