From 3e8437ae559487362fae3525beb79c534c213a51 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 12 Jul 2018 13:44:34 +0800
Subject: [PATCH] bug修复和功能优化

---
 screendisplay/Pods/EaseUI/EaseUI/EMUIKit/ViewController/EaseLocationViewController.m |  248 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 248 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/ViewController/EaseLocationViewController.m b/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/ViewController/EaseLocationViewController.m
new file mode 100755
index 0000000..ebba5fc
--- /dev/null
+++ b/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/ViewController/EaseLocationViewController.m
@@ -0,0 +1,248 @@
+/************************************************************
+ *  * Hyphenate CONFIDENTIAL
+ * __________________
+ * Copyright (C) 2016 Hyphenate Inc. All rights reserved.
+ *
+ * NOTICE: All information contained herein is, and remains
+ * the property of Hyphenate Inc.
+ * Dissemination of this information or reproduction of this material
+ * is strictly forbidden unless prior written permission is obtained
+ * from Hyphenate Inc.
+ */
+
+#import <CoreLocation/CoreLocation.h>
+#import <MapKit/MapKit.h>
+#import "EaseLocationViewController.h"
+
+#import "UIViewController+HUD.h"
+#import "EaseLocalDefine.h"
+
+static EaseLocationViewController *defaultLocation = nil;
+
+@interface EaseLocationViewController () <MKMapViewDelegate,CLLocationManagerDelegate>
+{
+    MKMapView *_mapView;
+    MKPointAnnotation *_annotation;
+    CLLocationManager *_locationManager;
+    CLLocationCoordinate2D _currentLocationCoordinate;
+    BOOL _isSendLocation;
+}
+
+@property (strong, nonatomic) NSString *addressString;
+
+@end
+
+@implementation EaseLocationViewController
+
+@synthesize addressString = _addressString;
+
+- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+    if (self) {
+        _isSendLocation = YES;
+    }
+    
+    return self;
+}
+
+- (instancetype)initWithLocation:(CLLocationCoordinate2D)locationCoordinate
+{
+    self = [super initWithNibName:nil bundle:nil];
+    if (self) {
+        _isSendLocation = NO;
+        _currentLocationCoordinate = locationCoordinate;
+    }
+    
+    return self;
+}
+
++ (instancetype)defaultLocation
+{
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        defaultLocation = [[EaseLocationViewController alloc] initWithNibName:nil bundle:nil];
+    });
+    
+    return defaultLocation;
+}
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    
+    self.title = NSEaseLocalizedString(@"location.messageType", @"location message");
+    
+    UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
+    [backButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/back"] forState:UIControlStateNormal];
+    [backButton addTarget:self.navigationController action:@selector(popViewControllerAnimated:) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
+    [self.navigationItem setLeftBarButtonItem:backItem];
+    
+    _mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
+    _mapView.delegate = self;
+    _mapView.mapType = MKMapTypeStandard;
+    _mapView.zoomEnabled = YES;
+    [self.view addSubview:_mapView];
+    
+    if (_isSendLocation) {
+        _mapView.showsUserLocation = YES;//������������������
+        
+        UIButton *sendButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 44)];
+        [sendButton setTitle:NSEaseLocalizedString(@"send", @"Send") forState:UIControlStateNormal];
+        sendButton.accessibilityIdentifier = @"send_location";
+        [sendButton setTitleColor:[UIColor colorWithRed:32 / 255.0 green:134 / 255.0 blue:158 / 255.0 alpha:1.0] forState:UIControlStateNormal];
+        [sendButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
+        [sendButton addTarget:self action:@selector(sendLocation) forControlEvents:UIControlEventTouchUpInside];
+        [self.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:sendButton]];
+        self.navigationItem.rightBarButtonItem.enabled = NO;
+        
+        [self startLocation];
+    }
+    else{
+        [self removeToLocation:_currentLocationCoordinate];
+    }
+}
+
+- (void)didReceiveMemoryWarning
+{
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+-(void)viewWillAppear:(BOOL)animated
+{
+    [super viewWillAppear:animated];
+}
+
+-(void)viewWillDisappear:(BOOL)animated
+{
+    [super viewWillDisappear:animated];
+}
+
+#pragma mark - MKMapViewDelegate
+
+- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
+{
+    __weak typeof(self) weakSelf = self;
+    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
+    [geocoder reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray *array, NSError *error) {
+        if (!error && array.count > 0) {
+            CLPlacemark *placemark = [array objectAtIndex:0];
+            weakSelf.addressString = placemark.name;
+            
+            [self removeToLocation:userLocation.coordinate];
+        }
+    }];
+}
+
+- (void)mapView:(MKMapView *)mapView didFailToLocateUserWithError:(NSError *)error
+{
+    [self hideHud];
+    if (error.code == 0) {
+        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil
+                                                            message:[error.userInfo objectForKey:NSLocalizedRecoverySuggestionErrorKey]
+                                                           delegate:nil
+                                                  cancelButtonTitle:NSEaseLocalizedString(@"ok", @"OK")
+                                                  otherButtonTitles:nil, nil];
+        [alertView show];
+    }
+}
+
+- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
+{
+    switch (status) {
+        case kCLAuthorizationStatusNotDetermined:
+            if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
+            {
+                [_locationManager requestWhenInUseAuthorization];
+            }
+            break;
+        case kCLAuthorizationStatusDenied:
+        {
+            
+        }
+        default:
+            break;
+    }
+}
+
+#pragma mark - public
+
+/*!
+ @method
+ @brief ������������
+ @discussion
+ @result
+ */
+- (void)startLocation
+{
+    if([CLLocationManager locationServicesEnabled]){
+        _locationManager = [[CLLocationManager alloc] init];
+        _locationManager.delegate = self;
+        _locationManager.distanceFilter = 5;
+        _locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;//kCLLocationAccuracyBest;
+        if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
+            [_locationManager requestWhenInUseAuthorization];
+        }
+    }
+    
+    if (_isSendLocation) {
+        self.navigationItem.rightBarButtonItem.enabled = NO;
+    }
+    
+    [self showHudInView:self.view hint:NSEaseLocalizedString(@"location.ongoning", @"locating...")];
+}
+
+/*!
+ @method
+ @brief ���������������������
+ @discussion
+ @param coords  ������������
+ @result
+ */
+-(void)createAnnotationWithCoords:(CLLocationCoordinate2D)coords
+{
+    if (_annotation == nil) {
+        _annotation = [[MKPointAnnotation alloc] init];
+    }
+    else{
+        [_mapView removeAnnotation:_annotation];
+    }
+    _annotation.coordinate = coords;
+    [_mapView addAnnotation:_annotation];
+}
+
+/*!
+ @method
+ @brief ������������������������������
+ @discussion
+ @param locationCoordinate  ������������
+ @result
+ */
+- (void)removeToLocation:(CLLocationCoordinate2D)locationCoordinate
+{
+    [self hideHud];
+    
+    _currentLocationCoordinate = locationCoordinate;
+    float zoomLevel = 0.01;
+    MKCoordinateRegion region = MKCoordinateRegionMake(_currentLocationCoordinate, MKCoordinateSpanMake(zoomLevel, zoomLevel));
+    [_mapView setRegion:[_mapView regionThatFits:region] animated:YES];
+    
+    if (_isSendLocation) {
+        self.navigationItem.rightBarButtonItem.enabled = YES;
+    }
+    
+    [self createAnnotationWithCoords:_currentLocationCoordinate];
+}
+
+- (void)sendLocation
+{
+    if (_delegate && [_delegate respondsToSelector:@selector(sendLocationLatitude:longitude:andAddress:)]) {
+        [_delegate sendLocationLatitude:_currentLocationCoordinate.latitude longitude:_currentLocationCoordinate.longitude andAddress:_addressString];
+    }
+    
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+@end

--
Gitblit v1.8.0