在iOS中的uinavigationbar顶部显示闪烁控件

时间:2015-04-02 05:29:22

标签: ios objective-c cocoa-touch ios7 uinavigationcontroller

我希望在我的应用程序中实现与iOS提供程序在后台进行调用时相同的功能。

即。在某些情况下,我想在屏幕顶部显示一个闪烁的按钮(在状态栏和导航栏上)与应用程序,当用户点击该按钮时,我想在同一个按钮上推特定的视图控制器。

参考屏幕截图 enter image description here

实现这一目标的赌注是什么?

我试过这个

 UIButton *hideBtn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 320, 20)]; 
[hideBtn addTarget:delegate.familyJobMonitorViewController action:@selector(hideAndShowView) forControlEvents:UIControlEventTouchUpInside];
    [delegate.navigationController.navigationBar addSubview:hideBtn];

它工作正常,但在这种情况下我必须手动管理很多东西。有没有更好的可用

直接API或内置于可可的东西。

1 个答案:

答案 0 :(得分:0)

您可以使用CoreAnimation来循环动画,在这种情况下切换图层的不透明度。通过设置autoreverses = true,动画将在fromValuetoValue之间循环。通过设置repeatCount = MAXFLOAT,动画将一直运行直到停止。

@implementation ViewController
{
    BOOL        _blinking;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton* button = [UIButton buttonWithType:UIButtonTypeSystem];
    [button setTitle:@"Tap to Resume" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(onResume:) forControlEvents:UIControlEventTouchUpInside];
    self.navigationItem.titleView = button;
}

-(IBAction)onResume:(id)sender
{
    [self toggleBlinking];
}

-(void)toggleBlinking
{
    CALayer*    layer = self.navigationItem.titleView.layer;

    _blinking = !_blinking;

    if(!_blinking)
    {
        [layer removeAnimationForKey:@"opacity"];
    }
    else
    {
        CABasicAnimation*    animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
        animation.fromValue = @(1.0);
        animation.toValue = @(0.0);
        animation.duration = 1.0;
        animation.autoreverses = true;
        animation.repeatCount = MAXFLOAT;

        [layer addAnimation:animation forKey:@"opacity"];
    }
}

@end