From 5dee29a21c13136dc1e83df51e56d64d698ae07a Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 10 Jul 2015 18:09:12 -0700 Subject: [PATCH] Add a play indicator for running apps --- .../Play.imageset/Contents.json | 21 ++++++++++++++ .../Images.xcassets/Play.imageset/play.png | Bin 0 -> 17407 bytes Limelight/UIAppView.m | 27 ++++++++++++------ .../ViewControllers/MainFrameViewController.m | 2 ++ 4 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 Limelight/Images.xcassets/Play.imageset/Contents.json create mode 100644 Limelight/Images.xcassets/Play.imageset/play.png diff --git a/Limelight/Images.xcassets/Play.imageset/Contents.json b/Limelight/Images.xcassets/Play.imageset/Contents.json new file mode 100644 index 00000000..e30bc554 --- /dev/null +++ b/Limelight/Images.xcassets/Play.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "play.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Limelight/Images.xcassets/Play.imageset/play.png b/Limelight/Images.xcassets/Play.imageset/play.png new file mode 100644 index 0000000000000000000000000000000000000000..d03e6e6e1fc75ad8ca5a6e9e329797967dddd58e GIT binary patch literal 17407 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 K=d#Wzp$PycTsdn1 literal 0 HcmV?d00001 diff --git a/Limelight/UIAppView.m b/Limelight/UIAppView.m index 0d13d7d0..f83be017 100644 --- a/Limelight/UIAppView.m +++ b/Limelight/UIAppView.m @@ -12,9 +12,9 @@ App* _app; UIButton* _appButton; UILabel* _appLabel; + UIImageView* _appOverlay; id _callback; } -static int LABEL_DY = 20; - (id) initWithApp:(App*)app andCallback:(id)callback { self = [super init]; @@ -28,29 +28,38 @@ static int LABEL_DY = 20; [_appButton sizeToFit]; [_appButton addTarget:self action:@selector(appClicked) forControlEvents:UIControlEventTouchUpInside]; + _appOverlay = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Play"]]; + _appOverlay.layer.shadowColor = [UIColor blackColor].CGColor; + _appOverlay.layer.shadowOffset = CGSizeMake(0, 0); + _appOverlay.layer.shadowOpacity = 1; + _appOverlay.layer.shadowRadius = 2.0; + [_appOverlay setHidden: YES]; + [self addSubview:_appButton]; + [self addSubview:_appOverlay]; [self sizeToFit]; + _appButton.frame = CGRectMake(0, 0, noImage.size.width, noImage.size.height); + _appOverlay.frame = CGRectMake(0, 0, noImage.size.width / 2.f, noImage.size.height / 4.f); self.frame = CGRectMake(0, 0, noImage.size.width, noImage.size.height); + [_appOverlay setCenter:CGPointMake(self.frame.size.width/2, self.frame.size.height/6)]; return self; } -- (void) updateBounds { - float x = _appButton.frame.origin.x < _appLabel.frame.origin.x ? _appButton.frame.origin.x : _appLabel.frame.origin.x; - float y = _appButton.frame.origin.y < _appLabel.frame.origin.y ? _appButton.frame.origin.y : _appLabel.frame.origin.y; - self.bounds = CGRectMake(x , y, _appButton.frame.size.width > _appLabel.frame.size.width ? _appButton.frame.size.width : _appLabel.frame.size.width, _appButton.frame.size.height + _appLabel.frame.size.height + LABEL_DY / 2); - self.frame = CGRectMake(x , y, _appButton.frame.size.width > _appLabel.frame.size.width ? _appButton.frame.size.width : _appLabel.frame.size.width, _appButton.frame.size.height + _appLabel.frame.size.height + LABEL_DY / 2); -} - - (void) appClicked { [_callback appClicked:_app]; } - (void) updateAppImage { - if (_app.appImage != nil) { + [_appOverlay setHidden:!_app.isRunning]; + + if (_app.appImage != nil && !(_app.appImage.size.width == 130.f && _app.appImage.size.height == 180.f)) { _appButton.frame = CGRectMake(0, 0, _app.appImage.size.width / 2, _app.appImage.size.height / 2); self.frame = CGRectMake(0, 0, _app.appImage.size.width / 2, _app.appImage.size.height / 2); + _appOverlay.frame = CGRectMake(0, 0, self.frame.size.width / 2.f, self.frame.size.height / 4.f); + _appOverlay.layer.shadowRadius = 4.0; + [_appOverlay setCenter:CGPointMake(self.frame.size.width/2, self.frame.size.height/6)]; [_appButton setBackgroundImage:_app.appImage forState:UIControlStateNormal]; [self setNeedsDisplay]; } diff --git a/Limelight/ViewControllers/MainFrameViewController.m b/Limelight/ViewControllers/MainFrameViewController.m index 71601bc9..3ba8137f 100644 --- a/Limelight/ViewControllers/MainFrameViewController.m +++ b/Limelight/ViewControllers/MainFrameViewController.m @@ -302,6 +302,7 @@ static NSArray* appList; currentApp.isRunning = NO; dispatch_async(dispatch_get_main_queue(), ^{ + [self updateApps]; [self performSegueWithIdentifier:@"createStreamFrame" sender:nil]; }); @@ -318,6 +319,7 @@ static NSArray* appList; [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDestructive handler:nil]]; dispatch_async(dispatch_get_main_queue(), ^{ + [self updateApps]; [self presentViewController:alert animated:YES completion:nil]; }); });