我希望在我的应用程序中实现与iOS提供程序在后台进行调用时相同的功能。
即。在某些情况下,我想在屏幕顶部显示一个闪烁的按钮(在状态栏和导航栏上)与应用程序,当用户点击该按钮时,我想在同一个按钮上推特定的视图控制器。
参考屏幕截图
实现这一目标的赌注是什么?
我试过这个
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或内置于可可的东西。
答案 0 :(得分:0)
您可以使用CoreAnimation
来循环动画,在这种情况下切换图层的不透明度。通过设置autoreverses = true
,动画将在fromValue
和toValue
之间循环。通过设置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