location.m
#import <Foundation/Foundation.h>
#import "LocateMotion.h"
@implementation LocateMotion
- (id)initWithLocation:(CLLocation *)location
andActivity:(CMMotionActivity *)activity {
_location = location;
_activity = activity;
return self;
}
- (BOOL)isSameActivity:(LocateMotion *)lm {
if(
(_activity.stationary == lm.activity.stationary) &&
(_activity.walking == lm.activity.walking) &&
(_activity.running == lm.activity.running) &&
(_activity.automotive == lm.activity.automotive) &&
(_activity.unknown == lm.activity.unknown)
) {
return YES;
}
return NO;
}
@end
location.h
#ifndef LocateMotion_h
#define LocateMotion_h
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
#import <CoreMotion/CoreMotion.h>
@interface LocateMotion : NSObject
@property (nonatomic, strong) CLLocation *location;
@property (nonatomic, strong) CMMotionActivity *activity;
- (id)initWithLocation:(CLLocation*)location
andActivity:(CMMotionActivity*)activity;
- (BOOL)isSameActivity:(LocateMotion*)anotherLocateMotion;
@end
#endif /* LocateMotion_h */
ViewController.h
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
@interface ViewController : UIViewController
<CLLocationManagerDelegate, MKMapViewDelegate>
@end
ViewContropller.m
#import <CoreMotion/CoreMotion.h>
#import <MapKit/MapKit.h>
#import "ViewController.h"
#import "LocateMotion.h"
#pragma mark - ColorPolyline class
@interface ColorPolyline : MKPolyline
@property (strong, nonatomic) UIColor *drawColor;
@end
@implementation ColorPolyline
@end
#pragma mark - MotionLogViewController
@interface ViewController()
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@end
@implementation ViewController {
CLLocationManager *_locationManager;
NSMutableArray *_locationItems;
CMMotionActivityManager *_activityManager;
CMMotionActivity *_motionActivity;
BOOL _deferredLocationUpdates;
NSString *_lastAnnotation;
}
- (void)viewDidLoad {
[super viewDidLoad];
_locationItems = [NSMutableArray array];
_motionActivity = nil;
_deferredLocationUpdates = NO;
_lastAnnotation = @"";
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
_locationManager.activityType = CLActivityTypeOtherNavigation;
_locationManager.distanceFilter = kCLDistanceFilterNone;
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[_locationManager startUpdatingLocation];
if([CMMotionActivityManager isActivityAvailable]) {
[self startGettingMotionActivity];
}
}
- (void)viewDidAppear:(BOOL)animated {
[_mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
if([CMMotionActivityManager isActivityAvailable]) {
[self stopGettingMotionActivity];
}
}
#pragma mark - location Job
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
for(CLLocation *loc in locations) {
LocateMotion *lm = [[LocateMotion alloc] initWithLocation:loc andActivity:_motionActivity];
if(_locationItems.count >1){
LocateMotion *lastLM = [_locationItems lastObject];
if(![lastLM isSameActivity:lm]) {
[self drawActivity];
}
}
[_locationItems addObject:lm];
}
if(!_deferredLocationUpdates) {
CLLocationDistance distance = 100.0;
NSTimeInterval time = 30.0;
[_locationManager allowDeferredLocationUpdatesUntilTraveled:distance timeout:time];
_deferredLocationUpdates = YES;
}
}
-(void)locationManager:(CLLocationManager *)manager
didFinishDeferredUpdatesWithError:(NSError *)error {
_deferredLocationUpdates = NO;
[self drawActivity];
}
#pragma mark - Motion Job
- (void)startGettingMotionActivity {
_activityManager = [[CMMotionActivityManager alloc]init];
[_activityManager startActivityUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMMotionActivity *activity) {
dispatch_async(dispatch_get_main_queue(), ^{
self->_motionActivity = activity;
});
}];
}
-(void)stopGettingMotionActivity {
[_activityManager stopActivityUpdates];
_activityManager = nil;
}
#pragma mark - Map job
- (void)drawActivity {
if(_locationItems) {
if(_locationItems.count > 1) {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSString *outputDateFormatterStr= @"HH:mm";
[dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]];
[dateFormatter setDateFormat:outputDateFormatterStr];
CLLocationCoordinate2D coordinates[500];
for (int index = 0; index < _locationItems.count; index++) {
LocateMotion *lm = [_locationItems objectAtIndex:index];
CLLocationCoordinate2D coordinate = lm.location.coordinate;
coordinates[index] = coordinate;
NSString *annStr =
[dateFormatter stringForObjectValue:lm.location.timestamp];
int minute = [[annStr substringFromIndex:3] intValue];
if(minute%5==0) {
if(![annStr isEqualToString:_lastAnnotation]) {
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = coordinate;
point.title = annStr;
[_mapView addAnnotation:point];
[_mapView selectAnnotation:point animated:YES];
_lastAnnotation = annStr;
}
}
}
ColorPolyline *polyline=[ColorPolyline polylineWithCoordinates:coordinates count:_locationItems.count];
polyline.drawColor = [self getActivityColor:[_locationItems lastObject]];
[_mapView addOverlay:polyline level:MKOverlayLevelAboveRoads];
for (int index = 0; index < _locationItems.count-1; index++) {
[_locationItems removeObjectAtIndex:0];
}
}
}
}
- (MKOverlayRenderer *)mapViewrendererForOverlay:(id < MKOverlay >)overlay {
ColorPolyline *polyline = (ColorPolyline*) overlay;
MKPolylineRenderer *renderer = [[MKPolylineRenderer alloc] initWithPolyline:polyline];
renderer.strokeColor = [polyline.drawColor colorWithAlphaComponent:0.7];
renderer.lineWidth = 10.0;
return (MKOverlayRenderer*)renderer;
}
- (UIColor *)getActivityColor:(LocateMotion*)lm {
if(lm.activity.stationary) return [UIColor blueColor];
if(lm.activity.walking) return [UIColor greenColor];
if(lm.activity.running) return [UIColor orangeColor];
if(lm.activity.automotive) return [UIColor redColor];
return [UIColor grayColor];
}
@end
能成功但不能安装是什么意思,有没有具体的错误提示
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632