You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

97 lines
3.1 KiB

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#import "GoogleMapsDemos/Samples/SnapshotReadyViewController.h"
#import <GoogleMaps/GoogleMaps.h>
@interface SnapshotReadyViewController ()<GMSMapViewDelegate>
@end
@implementation SnapshotReadyViewController {
GMSMapView *_mapView;
UILabel *_statusLabel;
UIBarButtonItem *_waitButton;
BOOL _isAwaitingSnapshot;
}
- (void)viewDidLoad {
[super viewDidLoad];
GMSCameraPosition *camera =
[GMSCameraPosition cameraWithLatitude:-33.868 longitude:151.2086 zoom:6];
_mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
_mapView.delegate = self;
self.view = _mapView;
// Add status label, initially hidden.
_statusLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 30)];
_statusLabel.alpha = 0.0f;
_statusLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
_statusLabel.backgroundColor = [UIColor blueColor];
_statusLabel.textColor = [UIColor whiteColor];
_statusLabel.textAlignment = NSTextAlignmentCenter;
// Add a wait button to signify on the next SnapshotReady event, a screenshot of the map will
// be taken.
_waitButton = [[UIBarButtonItem alloc] initWithTitle:@"Wait for snapshot"
style:UIBarButtonItemStylePlain
target:self
action:@selector(didTapWait)];
self.navigationItem.rightBarButtonItems = @[ _waitButton ];
[_mapView addSubview:_statusLabel];
}
#pragma mark GMSMapViewDelegate
- (void)mapViewSnapshotReady:(GMSMapView *)mapView {
if (_isAwaitingSnapshot) {
_isAwaitingSnapshot = NO;
_waitButton.enabled = YES;
_waitButton.title = @"Wait for snapshot";
[self takeSnapshot];
}
_statusLabel.alpha = 0.8f;
_statusLabel.text = @"Snapshot Ready";
// Remove status label after 1 second.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC),
dispatch_get_main_queue(), ^{
_statusLabel.alpha = 0.0f;
});
}
#pragma mark Private
- (void)didTapWait {
_isAwaitingSnapshot = YES;
_waitButton.enabled = NO;
_waitButton.title = @"Waiting";
}
- (void)takeSnapshot {
// Take a snapshot of the map.
UIGraphicsBeginImageContextWithOptions(_mapView.bounds.size, YES, 0);
[_mapView drawViewHierarchyInRect:_mapView.bounds afterScreenUpdates:YES];
UIImage *mapSnapShot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Put snapshot image into an UIImageView and overlay on top of map.
UIImageView *imageView = [[UIImageView alloc] initWithImage:mapSnapShot];
imageView.layer.borderColor = [UIColor redColor].CGColor;
imageView.layer.borderWidth = 10.0f;
[_mapView addSubview:imageView];
// Remove imageView after 1 second.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[UIView animateWithDuration:1
animations:^{
imageView.alpha = 0.0f;
}
completion:^(BOOL finished) {
[imageView removeFromSuperview];
}];
});
}
@end