iOS開發之地圖代理不起作用(提示vImage decode failed, falling back to CG path.) – iPhone手機開發技術文章 iPhone軟體開發教學課程

項目中用到瞭地圖相關的東西,就把以前的demo搬瞭出來,結果發現直接運行之前的demo沒有問題,在xcode5下新建項目再把代碼粘貼過來就會提示

May  5 11:36:21 infomedia-iPod-touch TestLocation[1465] : CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
May  5 11:36:21 infomedia-iPod-touch TestLocation[1465] : CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-05 11:36:21.974 TestLocation[1465:8b03] vImage decode failed, falling back to CG path.
2014-05-05 11:36:21.969 TestLocation[1465:9003] vImage decode failed, falling back to CG path.
May  5 11:36:22 infomedia-iPod-touch TestLocation[1465] : CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-05 11:36:22.653 TestLocation[1465:a003] vImage decode failed, falling back to CG path.
May  5 11:36:22 infomedia-iPod-touch TestLocation[1465] : CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-05 11:36:22.691 TestLocation[1465:9503] vImage decode failed, falling back to CG path.
May  5 11:36:22 infomedia-iPod-touch TestLocation[1465] : CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-05 11:36:22.711 TestLocation[1465:890b] vImage decode failed, falling back to CG path.
May  5 11:36:22 infomedia-iPod-touch TestLocation[1465] : CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-05 11:36:22.725 TestLocation[1465:9003] vImage decode failed, falling back to CG path.
May  5 11:36:22 infomedia-iPod-touch TestLocation[1465] : CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-05 11:36:22.733 TestLocation[1465:9b03] vImage decode failed, falling back to CG path.
May  5 11:36:22 infomedia-iPod-touch TestLocation[1465] : CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-05 11:36:22.736 TestLocation[1465:8b03] vImage decode failed, falling back to CG path.
May  5 11:36:22 infomedia-iPod-touch TestLocation[1465] : CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-05 11:36:22.777 TestLocation[1465:9207] vImage decode failed, falling back to CG path.

檢查瞭很多遍,代碼一模一樣,就是代理方法不執行,到網上搜瞭好多資料,沒有解決。最後想到在xcode5和xcode4.6下開發的差異,估計是arc搗的鬼,然後把arc改為NO,結果就正常運行瞭。順便把代碼貼出來……

工具:xcode5.0

1.新建一個single view application ,導入map kit和core location庫,將arc改為NO

2.ViewController.h文件

#import 
#import 
#import 

@interface ViewController : UIViewController {
    MKMapView *_mapView;
    UILabel *_showLabel;
}

@end

ViewController.m文件

#import "ViewController.h"
#import "MapAddress.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    CLLocationManager* manager = [[CLLocationManager alloc] init];
    //定位的精確度
    manager.desiredAccuracy = kCLLocationAccuracyBest;
    //定位距離
    manager.distanceFilter = 1;
    manager.delegate = self;
    //開始定位
    [manager startUpdatingLocation];
    
    //地圖
    _mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    _mapView.showsUserLocation = YES;
    [self.view addSubview:_mapView];
}

//定位成功
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
    //當前的位置
    CLLocation* newLocation = [locations lastObject];
    NSString* str = [MapAddress getGoogleAddress:newLocation];
    NSLog(@"%@",str);
    
    //停止定位
    //[manager stopUpdatingLocation];
    
    //地圖顯示
    //定位後的經緯度
    CLLocationCoordinate2D coordinate = newLocation.coordinate;
    //縮放比例
    MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);
    //確定要顯示的區域
    MKCoordinateRegion region = MKCoordinateRegionMake(coordinate, span);
    //讓地圖顯示這個區域
    [_mapView setRegion:region animated:YES];
}

//定位失敗
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    NSLog(@"定位失敗");
}
@end

3.MapAddress.h文件

#import 
#import 

@interface MapAddress : NSObject

+ (NSString *) getBaiduAddress:(CLLocation *)location;
+ (NSString *) getGoogleAddress:(CLLocation *)location;
@end

MapAddress.m文件

#import "MapAddress.h"

@implementation MapAddress

+ (NSString *) getBaiduAddress:(CLLocation *)location {
    double latitude = location.coordinate.latitude;
    double longtitude = location.coordinate.longitude;
    NSString *urlstr = [NSString stringWithFormat:
                        @"https://api.map.baidu.com/geocoder?output=json&location=%f,%f&key=dc40f705157725fc98f1fee6a15b6e60",
                        latitude, longtitude];
    NSURL *url = [NSURL URLWithString:urlstr];
    NSString *s = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    return s;
}
+ (NSString *) getGoogleAddress:(CLLocation *)location {
    NSString *urlstr = [NSString stringWithFormat:
                        @"https://maps.google.com/maps/api/geocode/json?latlng=%f,%f&language=zh-CN&sensor=false",
                        location.coordinate.latitude, location.coordinate.longitude];
    NSLog(@"%@", urlstr);
    NSURL *url = [NSURL URLWithString:urlstr];
    NSString *s = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    return s;
}

@end

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *