diff --git a/Classes/BITImageAnnotationViewController.m b/Classes/BITImageAnnotationViewController.m index b8579cf64d..910b81eaad 100644 --- a/Classes/BITImageAnnotationViewController.m +++ b/Classes/BITImageAnnotationViewController.m @@ -11,12 +11,16 @@ #import "BITRectangleImageAnnotation.h" #import "BITArrowImageAnnotation.h" #import "BITBlurImageAnnotation.h" +#import "BITHockeyHelper.h" +#import "HockeySDKPrivate.h" @interface BITImageAnnotationViewController () @property (nonatomic, strong) UIImageView *imageView; @property (nonatomic, strong) UISegmentedControl *editingControls; @property (nonatomic, strong) NSMutableArray *objects; + +@property (nonatomic, strong) UITapGestureRecognizer *tapRecognizer; @property (nonatomic, strong) UIPanGestureRecognizer *panRecognizer; @property (nonatomic, strong) UIPinchGestureRecognizer *pinchRecognizer; @@ -48,7 +52,15 @@ self.view.backgroundColor = [UIColor groupTableViewBackgroundColor]; + NSArray *icons = @[@"Rectangle.png", @"Arrow.png", @"Blur.png"]; + self.editingControls = [[UISegmentedControl alloc] initWithItems:@[@"Rectangle", @"Arrow", @"Blur"]]; + int i=0; + for (NSString *imageName in icons){ + [self.editingControls setImage:bit_imageNamed(imageName, BITHOCKEYSDK_BUNDLE) forSegmentAtIndex:i++]; + } + + [self.editingControls setSegmentedControlStyle:UISegmentedControlStyleBar]; self.navigationItem.titleView = self.editingControls; @@ -66,18 +78,32 @@ [self.view addSubview:self.imageView]; - self.imageView.frame = self.view.bounds; + // Erm. + self.imageView.frame = [UIScreen mainScreen].bounds; self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panned:)]; self.pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinched:)]; + self.tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; + + [self.panRecognizer requireGestureRecognizerToFail:self.tapRecognizer]; [self.imageView addGestureRecognizer:self.pinchRecognizer]; [self.imageView addGestureRecognizer:self.panRecognizer]; + [self.view addGestureRecognizer:self.tapRecognizer]; self.imageView.userInteractionEnabled = YES; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc ] initWithTitle:@"Discard" style:UIBarButtonItemStyleBordered target:self action:@selector(discard:)]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc ] initWithTitle:@"Save" style:UIBarButtonItemStyleBordered target:self action:@selector(save:)]; + + [self fitImageViewFrame]; + + + // Do any additional setup after loading the view. +} + +- (void)fitImageViewFrame { + CGFloat heightScaleFactor = self.view.frame.size.height / self.image.size.height; CGFloat widthScaleFactor = self.view.frame.size.width / self.image.size.width; @@ -87,9 +113,6 @@ CGSize scaledImageSize = CGSizeMake(self.image.size.width * factor, self.image.size.height * factor); self.imageView.frame = CGRectMake(self.view.frame.size.width/2 - scaledImageSize.width/2, self.view.frame.size.height/2 - scaledImageSize.height/2, scaledImageSize.width, scaledImageSize.height); - - - // Do any additional setup after loading the view. } -(void)editingAction:(id)sender { @@ -196,16 +219,6 @@ } } --(UIView *)firstAnnotationThatIsNotBlur { - for (BITImageAnnotation *annotation in self.imageView.subviews){ - if (![annotation isKindOfClass:[BITBlurImageAnnotation class]]){ - return annotation; - } - } - - return self.imageView; -} - -(void)pinched:(UIPinchGestureRecognizer *)gestureRecognizer { if (gestureRecognizer.state == UIGestureRecognizerStateBegan){ // try to figure out which view we are talking about. @@ -257,10 +270,40 @@ } } -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. +-(void)tapped:(UIGestureRecognizer *)tapRecognizer { + if (self.navigationController.navigationBarHidden){ + // [[UIApplication sharedApplication] setStatusBarHidden:NO]; + [UIView animateWithDuration:0.35f animations:^{ + self.navigationController.navigationBar.alpha = 1; + } completion:^(BOOL finished) { + [self fitImageViewFrame]; + [self.navigationController setNavigationBarHidden:NO animated:NO]; + + + }]; + } else { + [UIView animateWithDuration:0.35f animations:^{ + self.navigationController.navigationBar.alpha = 0; + + } completion:^(BOOL finished) { + [self.navigationController setNavigationBarHidden:YES animated:NO]; + + [self fitImageViewFrame]; + + }]; + } + +} + +#pragma mark - Helpers +-(UIView *)firstAnnotationThatIsNotBlur { + for (BITImageAnnotation *annotation in self.imageView.subviews){ + if (![annotation isKindOfClass:[BITBlurImageAnnotation class]]){ + return annotation; + } + } + + return self.imageView; } @end diff --git a/Resources/Arrow.png b/Resources/Arrow.png new file mode 100644 index 0000000000..6d8fac1039 Binary files /dev/null and b/Resources/Arrow.png differ diff --git a/Resources/Arrow@2x.png b/Resources/Arrow@2x.png new file mode 100644 index 0000000000..116a47ee03 Binary files /dev/null and b/Resources/Arrow@2x.png differ diff --git a/Resources/Blur.png b/Resources/Blur.png new file mode 100644 index 0000000000..7dd64b9fe3 Binary files /dev/null and b/Resources/Blur.png differ diff --git a/Resources/Blur@2x.png b/Resources/Blur@2x.png new file mode 100644 index 0000000000..8cf6ffe5bc Binary files /dev/null and b/Resources/Blur@2x.png differ diff --git a/Resources/Cancel.png b/Resources/Cancel.png new file mode 100644 index 0000000000..b8112db68f Binary files /dev/null and b/Resources/Cancel.png differ diff --git a/Resources/Cancel@2x.png b/Resources/Cancel@2x.png new file mode 100644 index 0000000000..3ddef8cb23 Binary files /dev/null and b/Resources/Cancel@2x.png differ diff --git a/Resources/Ok.png b/Resources/Ok.png new file mode 100644 index 0000000000..865372fa37 Binary files /dev/null and b/Resources/Ok.png differ diff --git a/Resources/Ok@2x.png b/Resources/Ok@2x.png new file mode 100644 index 0000000000..f1915b84f8 Binary files /dev/null and b/Resources/Ok@2x.png differ diff --git a/Resources/Rectangle.png b/Resources/Rectangle.png new file mode 100644 index 0000000000..49d81ea6b4 Binary files /dev/null and b/Resources/Rectangle.png differ diff --git a/Resources/Rectangle@2x.png b/Resources/Rectangle@2x.png new file mode 100644 index 0000000000..c7e413d1d4 Binary files /dev/null and b/Resources/Rectangle@2x.png differ diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index 0ab1521d57..993fffc7ea 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -145,6 +145,16 @@ 9760F6C418BB4D2D00959B93 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9760F6C318BB4D2D00959B93 /* AssetsLibrary.framework */; }; 9760F6CF18BB685600959B93 /* BITImageAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9760F6CD18BB685600959B93 /* BITImageAnnotation.h */; }; 9760F6D018BB685600959B93 /* BITImageAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9760F6CE18BB685600959B93 /* BITImageAnnotation.m */; }; + 9782023218F81BFC00A98D8B /* Arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 9782022818F81BFC00A98D8B /* Arrow.png */; }; + 9782023318F81BFC00A98D8B /* Arrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9782022918F81BFC00A98D8B /* Arrow@2x.png */; }; + 9782023418F81BFC00A98D8B /* Blur.png in Resources */ = {isa = PBXBuildFile; fileRef = 9782022A18F81BFC00A98D8B /* Blur.png */; }; + 9782023518F81BFC00A98D8B /* Blur@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9782022B18F81BFC00A98D8B /* Blur@2x.png */; }; + 9782023618F81BFC00A98D8B /* Cancel.png in Resources */ = {isa = PBXBuildFile; fileRef = 9782022C18F81BFC00A98D8B /* Cancel.png */; }; + 9782023718F81BFC00A98D8B /* Cancel@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9782022D18F81BFC00A98D8B /* Cancel@2x.png */; }; + 9782023818F81BFC00A98D8B /* Ok.png in Resources */ = {isa = PBXBuildFile; fileRef = 9782022E18F81BFC00A98D8B /* Ok.png */; }; + 9782023918F81BFC00A98D8B /* Ok@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9782022F18F81BFC00A98D8B /* Ok@2x.png */; }; + 9782023A18F81BFC00A98D8B /* Rectangle.png in Resources */ = {isa = PBXBuildFile; fileRef = 9782023018F81BFC00A98D8B /* Rectangle.png */; }; + 9782023B18F81BFC00A98D8B /* Rectangle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9782023118F81BFC00A98D8B /* Rectangle@2x.png */; }; 97F0F9FD18ABAECD00EF50AA /* iconCamera.png in Resources */ = {isa = PBXBuildFile; fileRef = 97F0F9FB18ABAECD00EF50AA /* iconCamera.png */; }; 97F0F9FE18ABAECD00EF50AA /* iconCamera@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 97F0F9FC18ABAECD00EF50AA /* iconCamera@2x.png */; }; 97F0FA0518B2294D00EF50AA /* BITFeedbackMessageAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 97F0FA0318AE5AED00EF50AA /* BITFeedbackMessageAttachment.m */; }; @@ -319,6 +329,16 @@ 9760F6C318BB4D2D00959B93 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; }; 9760F6CD18BB685600959B93 /* BITImageAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITImageAnnotation.h; sourceTree = ""; }; 9760F6CE18BB685600959B93 /* BITImageAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITImageAnnotation.m; sourceTree = ""; }; + 9782022818F81BFC00A98D8B /* Arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Arrow.png; sourceTree = ""; }; + 9782022918F81BFC00A98D8B /* Arrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Arrow@2x.png"; sourceTree = ""; }; + 9782022A18F81BFC00A98D8B /* Blur.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Blur.png; sourceTree = ""; }; + 9782022B18F81BFC00A98D8B /* Blur@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Blur@2x.png"; sourceTree = ""; }; + 9782022C18F81BFC00A98D8B /* Cancel.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Cancel.png; sourceTree = ""; }; + 9782022D18F81BFC00A98D8B /* Cancel@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Cancel@2x.png"; sourceTree = ""; }; + 9782022E18F81BFC00A98D8B /* Ok.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Ok.png; sourceTree = ""; }; + 9782022F18F81BFC00A98D8B /* Ok@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Ok@2x.png"; sourceTree = ""; }; + 9782023018F81BFC00A98D8B /* Rectangle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Rectangle.png; sourceTree = ""; }; + 9782023118F81BFC00A98D8B /* Rectangle@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Rectangle@2x.png"; sourceTree = ""; }; 97F0F9FB18ABAECD00EF50AA /* iconCamera.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iconCamera.png; sourceTree = ""; }; 97F0F9FC18ABAECD00EF50AA /* iconCamera@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iconCamera@2x.png"; sourceTree = ""; }; 97F0F9FF18AE375E00EF50AA /* BITImageAnnotationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITImageAnnotationViewController.h; sourceTree = ""; }; @@ -382,6 +402,16 @@ 1E5955A415B71BDC00A03429 /* Images */ = { isa = PBXGroup; children = ( + 9782022818F81BFC00A98D8B /* Arrow.png */, + 9782022918F81BFC00A98D8B /* Arrow@2x.png */, + 9782022A18F81BFC00A98D8B /* Blur.png */, + 9782022B18F81BFC00A98D8B /* Blur@2x.png */, + 9782022C18F81BFC00A98D8B /* Cancel.png */, + 9782022D18F81BFC00A98D8B /* Cancel@2x.png */, + 9782022E18F81BFC00A98D8B /* Ok.png */, + 9782022F18F81BFC00A98D8B /* Ok@2x.png */, + 9782023018F81BFC00A98D8B /* Rectangle.png */, + 9782023118F81BFC00A98D8B /* Rectangle@2x.png */, 97F0F9FB18ABAECD00EF50AA /* iconCamera.png */, 97F0F9FC18ABAECD00EF50AA /* iconCamera@2x.png */, 1E5955BB15B71C8600A03429 /* authorize_denied.png */, @@ -860,19 +890,29 @@ files = ( 1E5955C615B71C8600A03429 /* authorize_denied.png in Resources */, 1E5955C715B71C8600A03429 /* authorize_denied@2x.png in Resources */, + 9782023B18F81BFC00A98D8B /* Rectangle@2x.png in Resources */, 1E5955CA15B71C8600A03429 /* bg.png in Resources */, 97F0F9FD18ABAECD00EF50AA /* iconCamera.png in Resources */, + 9782023618F81BFC00A98D8B /* Cancel.png in Resources */, + 9782023318F81BFC00A98D8B /* Arrow@2x.png in Resources */, + 9782023818F81BFC00A98D8B /* Ok.png in Resources */, 1E5955CB15B71C8600A03429 /* buttonHighlight.png in Resources */, 1E5955CC15B71C8600A03429 /* buttonHighlight@2x.png in Resources */, 1E5955CF15B71C8600A03429 /* IconGradient.png in Resources */, 1E5955D015B71C8600A03429 /* IconGradient@2x.png in Resources */, + 9782023218F81BFC00A98D8B /* Arrow.png in Resources */, + 9782023A18F81BFC00A98D8B /* Rectangle.png in Resources */, 1EAF20A8162DC0F600957B1D /* feedbackActivity@2x~ipad.png in Resources */, 1EAF20A9162DC0F600957B1D /* feedbackActivity~ipad.png in Resources */, + 9782023918F81BFC00A98D8B /* Ok@2x.png in Resources */, + 9782023418F81BFC00A98D8B /* Blur.png in Resources */, 1EAF20AA162DC0F600957B1D /* feedbackActiviy.png in Resources */, 1EAF20AB162DC0F600957B1D /* feedbackActiviy@2x.png in Resources */, + 9782023518F81BFC00A98D8B /* Blur@2x.png in Resources */, 1E1127C416580C87007067A2 /* buttonRoundedDelete.png in Resources */, 1E1127C516580C87007067A2 /* buttonRoundedDelete@2x.png in Resources */, 1E1127C616580C87007067A2 /* buttonRoundedDeleteHighlighted.png in Resources */, + 9782023718F81BFC00A98D8B /* Cancel@2x.png in Resources */, 1E1127C716580C87007067A2 /* buttonRoundedDeleteHighlighted@2x.png in Resources */, 1E1127C816580C87007067A2 /* buttonRoundedRegular.png in Resources */, 97F0F9FE18ABAECD00EF50AA /* iconCamera@2x.png in Resources */,