iOS開發(fā)避免不開系統(tǒng)權(quán)限的問題,如何在APP中以更加友好的方式向用戶展示系統(tǒng)權(quán)限,似乎也是開發(fā)過程中指的深思的一件事。
創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè)|網(wǎng)站維護(hù)|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋成都會(huì)所設(shè)計(jì)等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身制作品質(zhì)網(wǎng)站。
那如何提高用戶獲取權(quán)限的通過率呢?以下幾種方式或許是不錯(cuò)的嘗試:
上面的只是一些嘗試,與本文的主要講述內(nèi)容關(guān)系不大,接下來我們主要來看一下常用的一些系統(tǒng)權(quán)限的狀態(tài)獲取以及主動(dòng)喚起權(quán)限請(qǐng)求的方法。
相機(jī)權(quán)限
相冊(cè)權(quán)限
日歷權(quán)限
麥克風(fēng)權(quán)限
推送權(quán)限
定位權(quán)限
提醒事項(xiàng)權(quán)限
通訊錄權(quán)限
互聯(lián)網(wǎng)權(quán)限
藍(lán)牙權(quán)限
引入頭文件 #import AVFoundation/AVFoundation.h
引入頭文件 #import Photos/Photos.h
引入頭文件 #import EventKit/EventKit.h
引入頭文件 #import AVFoundation/AVFoundation.h
引入頭文件 #import UserNotifications/UserNotifications.h
引入頭文件 #import CoreLocation/CoreLocation.h
封裝方法調(diào)用
TenLocationManager.h
TenLocationManager.m
引入頭文件 #import EventKit/EventKit.h
引入頭文件
iOS 9.0前 #import AddressBook/AddressBook.h
iOS 9.0后 #import Contacts/Contacts.h
引入頭文件 #import CoreTelephony/CTCellularData.h
系統(tǒng)未提供接口供開發(fā)者手動(dòng)請(qǐng)求網(wǎng)絡(luò)權(quán)限,iOS10以上系統(tǒng),應(yīng)用首次請(qǐng)求網(wǎng)絡(luò)會(huì)自動(dòng)彈出,一個(gè)應(yīng)用只彈出一次,卸載也不會(huì)重新彈出
引入頭文件 #import CoreBluetooth/CoreBluetooth.h
TenBluetoothManager.h
TenBluetoothManager.m
在項(xiàng)目功能中有一個(gè)定位CLLocation的需求,遇到了一些知識(shí)難點(diǎn),經(jīng)過各位大俠的幫助,問題解決,特此分享供大家學(xué)習(xí),希望大家共同學(xué)習(xí)進(jìn)步。
一、簡(jiǎn)單說明
1.CLLocationManager
CLLocationManager的常用操作和屬性
開始用戶定位- (void)startUpdatingLocation;
停止用戶定位- (void) stopUpdatingLocation;
說明:當(dāng)調(diào)用了startUpdatingLocation方法后,就開始不斷地定位用戶的'位置,中途會(huì)頻繁地調(diào)用代理的下面方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
每隔多少米定位一次
@property(assign, nonatomic) CLLocationDistance distanceFilter;
定位精確度(越精確就越耗電)
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
使用定位功能,首先要導(dǎo)入框架,遵守CLLocationManagerDelegate協(xié)議,再創(chuàng)建位置管理器CLLocationManager
在iOS8.0后,定位功能需要在info.plist中加入NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription這兩個(gè)NSString類型字段,才能夠使用定位功能
代碼貼出來與大家共勉,各位看官自行研究
{ self.locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = self; if([CLLocationManager locationServicesEnabled] == NO) { // NSLog(@"沒有GPS服務(wù)"); } //地理位置精確度 _locationManager.desiredAccuracy=kCLLocationAccuracyNearestTenMeters; //設(shè)置距離篩選器,double類型,只要距離變化多少,就調(diào)用委托代理 self.locationManager.distanceFilter = kCLDistanceFilterNone; // meters [_locationManager requestWhenInUseAuthorization];// 前臺(tái)定位 [_locationManager startUpdatingLocation];}- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ NSLog(@"longitude = %f", ((CLLocation *)[locations lastObject]).coordinate.longitude); NSLog(@"latitude = %f", ((CLLocation *)[locations lastObject]).coordinate.latitude); CGFloat longTI=((CLLocation *)[locations lastObject]).coordinate.longitude; CGFloat latTI=((CLLocation *)[locations lastObject]).coordinate.latitude; //將經(jīng)度顯示到label上 _longitudeLabel.text = [NSString stringWithFormat:@"%f",longTI]; //將緯度現(xiàn)實(shí)到label上 _latitudeLabel.text = [NSString stringWithFormat:@"%f",latTI]; // 獲取當(dāng)前所在的城市名 CLGeocoder *geocoder = [[CLGeocoder alloc] init]; //根據(jù)經(jīng)緯度反向地理編譯出地址信息 [geocoder reverseGeocodeLocation:locations.lastObject completionHandler:^(NSArray *array, NSError *error) { if (array.count 0) { CLPlacemark *placemark = [array objectAtIndex:0];// //將獲得的所有信息顯示到label上// self.location.text = placemark.name; //獲取城市 NSString *city = placemark.locality; if (!city) { //四大直轄市的城市信息無法通過locality獲得,只能通過獲取省份的方法來獲得(如果city為空,則可知為直轄市) city = placemark.administrativeArea; } // NSLog(@"city = %@", city); _cityName=city; } else if (error == nil [array count] == 0) { // NSLog(@"No results were returned."); } else if (error != nil) { // NSLog(@"An error occurred = %@", error); } }]; //系統(tǒng)會(huì)一直更新數(shù)據(jù),直到選擇停止更新,因?yàn)槲覀冎恍枰@得一次經(jīng)緯度即可,所以獲取之后就停止更新 [manager stopUpdatingLocation];}
以上是關(guān)于我給大家整理的IOS開發(fā)之詳解定位CLLocation,后續(xù)還會(huì)持續(xù)更新,希望大家能夠喜歡。
兩種方法設(shè)置:
LaunchScreen.storyboard
在LaunchScreen.storyboard中拖拽imageView并設(shè)置約束,勾選右側(cè)Use as launch Screen
工程—General—App Icons and Launch Images選項(xiàng)中設(shè)置Launch Screen File為所制作的LaunchScreen.storyboard或者LaunchScreen.xib
Assets.xcassets
設(shè)置LaunchImage
準(zhǔn)備:
各種尺寸啟動(dòng)圖:640 × 960,640 × 1136,750 × 1334,1242 × 2208,(橫平需要2208 ×1242)
iPhone Portrait iOS5,6(1x:320 × 480 pixels, 2x:640 × 960 pixels, Retina 4:640 × 1136 pixels)
iPhone Portrait iOS8,9(Retina HD 5.5”:1242 × 2208 pixels, Retina HD 4.7”:750 × 1334 pixels)
iPhone Landscape iOS 8,9(Retina HD 5.5”:2208 × 1242 pixels)
iPhone Portrait iOS7,9(2x:640 × 960 pixels, Retina 4:640 × 1136 pixels)
iPhone X Portrait iOS 11+ (3x:1125 x 2436 pixels)
配置
工程—General—App Icons and Launch Images選項(xiàng)中設(shè)置Launch Image Source 為L(zhǎng)aunchImage
LaunchScreen.storyboard 取消勾選Use as Launch Screen
置空路徑Launch Screen File
實(shí)際開發(fā)中,我們往往會(huì)遇到下面這種label:
我嘗試了下面幾種方案:
然而很不幸,這招對(duì)label的layer無效。
但是你又發(fā)現(xiàn)你的圖片被裁剪了:
你只看到它:
卻不知其實(shí)是它:
這招挺實(shí)在的,我也無話可說。
用button
真機(jī)調(diào)試經(jīng)常出現(xiàn)這個(gè)報(bào)錯(cuò):Xcode will continue when iPhone is finished
一般情況下,clean一下重新編譯調(diào)試,或者手機(jī)重啟一下,就能正常調(diào)試。
如果還是不行,就打開命令行terminal,輸入:
然后輸入密碼進(jìn)行下一步操作,就能正常真機(jī)調(diào)試。