IOS开发基础知识--碎片13
1:运行程序报the file couldn't be opened because you don't have permission to view it
解决办法:项目—>targets->build settings->build options->changed the value of the "Compiler for C/C++/Objective-C" to Default Compiler.
2:百度地图引用
1.1如图引用的是.framework形式开发包时,引入的命名空间则是 #import <BaiduMapAPI/BMapKit.h>//引入所有的头文件 #import <BaiduMapAPI/BMKMapView.h>//只引入所需的单个头文件 如果是引入用的是.a形式开发包时,引入的命名空间则是 #import “BMapKit.h" 1.2百度地图现在提供的两个.framework的包,一个是真机一个是测试机,可以使用终端的命令把它合成一个;
3:自定义大头针百度地图
- (void)viewDidLoad {[super viewDidLoad];//百度地图初始化_mapView=[[BMKMapView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-NAVBARHEIGHT)];_mapView.delegate=self;[self.view addSubview:_mapView];//标出坐标点 [self addPointAnnotation]; }//添加标注 - (void)addPointAnnotation {for (int i=0; i<self.coordinates.count; i++) {coordinateBean *model=self.coordinates[i];BMKPointAnnotation* pointAnnotation = [[BMKPointAnnotation alloc]init];CLLocationCoordinate2D coor;coor.latitude = model.latitude;coor.longitude = model.longitude;pointAnnotation.coordinate = coor;//通过title来起到传值的作用pointAnnotation.title=[NSString stringWithFormat:@"%d",i];[_mapView addAnnotation:pointAnnotation];//显示弹出窗 [_mapView selectAnnotation:pointAnnotation animated:YES];//判断那个是中心,没有则0必传参数if (i==self.selectIndex) {BMKCoordinateRegion region; ////表示范围的结构体region.center.latitude = model.latitude;// 中心中region.center.longitude = model.longitude;region.span.latitudeDelta = 0;//经度范围(设置为0.1表示显示范围为0.2的纬度范围)region.span.longitudeDelta = 0;//纬度范围 [_mapView setRegion:region];}} } //处理自定义弹出视图 - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation {if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myrenameMark"];newAnnotationView.pinColor = BMKPinAnnotationColorPurple;newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示 newAnnotationView.image = [UIImage imageNamed:self.mapPointImageName]; //把大头针换成别的图片int selectIndex=[((BMKPointAnnotation *)annotation).title intValue];//获得值coordinateBean *model=[self.coordinates objectAtIndex:[((BMKPointAnnotation *)annotation).title intValue]];UIView *popView=[[UIView alloc]initWithFrame:CGRectMake(0, 3, 100, 20)];UIImage *img=[UIImage imageNamed:@"mapViewBackground"];UIEdgeInsets edge=UIEdgeInsetsMake(0, 20, 0, 10);img=[img resizableImageWithCapInsets:edge resizingMode:UIImageResizingModeStretch];UIImageView *myimage=[[UIImageView alloc] initWithImage:img];myimage.frame=CGRectMake(30, 0, 100, 40);myimage.userInteractionEnabled=YES;[popView addSubview:myimage];//自定义显示的内容UILabel *driverName = [[UILabel alloc]initWithFrame:CGRectMake(0, 3, 100, 15)];driverName.backgroundColor=[UIColor clearColor];driverName.text=model.title;driverName.font = [UIFont systemFontOfSize:12];driverName.textColor = [UIColor blackColor];driverName.textAlignment = NSTextAlignmentLeft;[myimage addSubview:driverName];UILabel *carName = [[UILabel alloc]initWithFrame:CGRectMake(0, 18, 100, 15)];carName.backgroundColor=[UIColor clearColor];carName.text=model.comments;carName.font = [UIFont systemFontOfSize:12];carName.textColor = [UIColor blackColor];carName.textAlignment = NSTextAlignmentLeft;[myimage addSubview:carName];BMKActionPaopaoView *pView = [[BMKActionPaopaoView alloc]initWithCustomView:popView];pView.frame = CGRectMake(0, 0, 100, 40);((BMKPinAnnotationView*)newAnnotationView).paopaoView = nil;((BMKPinAnnotationView*)newAnnotationView).paopaoView = pView;newAnnotationView.tag=selectIndex+10;return newAnnotationView;}return nil; }- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated. } /*** @author wujunyang, 15-05-12 13:05:05** @brief 跟对百度地图的处理* @param animated <#animated description#>*/ -(void)viewWillAppear:(BOOL)animated {[_mapView viewWillAppear];_mapView.delegate=self;_locationService.delegate=self; } /*** @author wujunyang, 15-01-06 10:01:53** 跟对百度地图的处理** @param animated <#animated description#>*/ -(void)viewWillDisappear:(BOOL)animated {[_mapView viewWillDisappear];_mapView.delegate=nil;_locationService.delegate=nil; }其中有个自定义model:@interface coordinateBean : NSObject //纬度 @property(assign,nonatomic)float latitude; //经度 @property(assign,nonatomic)float longitude; //标题 @property(strong,nonatomic)NSString *title; //注解 @property(strong,nonatomic)NSString *comments; @end
4:自动隐藏和显示工具栏和导航条
toolbar属性、toolbarItems与上一讲的navigationBar、navigationItem类似。只不过toolbarItems没有navigationItem的左右区分,它就自己一个人在做事,相当于没有下属。可以在toolbar上设置很多,比如背景颜色、背景图片、背景样式、大小位置(不过有些貌似设置无效),当然和navigationBar一样,对于它的是否显示和隐藏是由它的老爸即navigationController控制的。所以[self.navigationController setNavigationBarHidden:YES animated:YES];也会把底部的toolBarItems给隐藏起来,如果要隐藏导航又不想底部toolBarItems被隐藏掉,可以用普通的view替代toolBarItems;首先在viewDidLoad里设置toolBarHidden = NO, 默认是YES(隐藏的)为了让toolbar显示,需要设置为NO(不隐藏)。- (void)viewDidLoad {[super viewDidLoad];self.title = @"隐藏导航栏";// self.toolbarItemsself.navigationController.toolbar.barStyle = self.toolBar.barStyle;self.navigationController.toolbarHidden = NO;[self.navigationController.toolbar setTranslucent:YES];self.toolbarItems = [[[NSMutableArray alloc] initWithArray:self.toolBar.items] autorelease]; }在点击中间button的时候的显示和隐藏navigation bar和toolBar实现代码如下:- (IBAction)toggleNavigationBar:(id)sender {//Check the current state of the navigation bar...BOOL navBarState = [self.navigationController isNavigationBarHidden];//Set the navigationBarHidden to the opposite of the current state.[self.navigationController setNavigationBarHidden:!navBarState animated:YES];[self.navigationController setToolbarHidden:!navBarState animated:YES];//Change the label on the button.if (navBarState){[button setTitle:@"隐藏 Navigationr and toolbar" forState:UIControlStateNormal];[button setTitle:@"隐藏 Navigation Bar toolbar" forState:UIControlStateHighlighted];}else{[button setTitle:@"显示 Navigation Bar toolbar" forState:UIControlStateNormal];[button setTitle:@"显示 Navigation Bar toolbar" forState:UIControlStateHighlighted];} }
5:View代码结构的一些建议
在viewDidload里面只做addSubview的事情,然后在viewWillAppear里面做布局的事情,最后在viewDidAppear里面做Notification的监听之类的事情。至于属性的初始化,则交给getter去做。@interface CustomObject() @property (nonatomic, strong) UILabel *label; @end@implement#pragma mark - life cycle- (void)viewDidLoad {[super viewDidLoad];[self.view addSubview:self.label]; }- (void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];self.label.frame = CGRectMake(1, 2, 3, 4); }#pragma mark - getters and setters- (UILabel *)label {if (_label == nil) {_label = [[UILabel alloc] init];_label.text = @"1234";_label.font = [UIFont systemFontOfSize:12];... ...}return label; } @end注意:*重点,在get方法里面不能写self.noLabel;千万不要用“点”语法,这样会造成get方法死循环,因为“点”语法就是调用的get方法,所以要用下划线属性名的方法得到对象(在内存这其实是一个指针)。
@interface MasonryViewController () @property(nonatomic,strong)UIView *conView; @property(nonatomic,assign)int intstate; @end@implementation MasonryViewController- (void)viewDidLoad {[super viewDidLoad];[self.view addSubview:self.conView]; } //懒加载 -(UIView *)conView {if(_conView==nil){_conView=[[UIView alloc]init];_conView.backgroundColor=[UIColor redColor];}return _conView; }-(int)intstate {_intstate=0;return _intstate; }//布局约束 -(void)viewDidLayoutSubviews {[self.conView mas_makeConstraints:^(MASConstraintMaker *make) {make.top.equalTo(self.view.mas_top).with.offset(100);make.left.equalTo(self.view.mas_left).with.offset(60);make.right.equalTo(self.view.mas_right).with.offset(0);make.height.equalTo(@50);}]; }- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning]; }
6: iOS中的生成随机数方法
生成0-x之间的随机正整数int value =arc4random_uniform(x + 1);生成随机正整数int value = arc4random() 通过arc4random() 获取0到x-1之间的整数的代码如下:int value = arc4random() % x; 获取1到x之间的整数的代码如下: int value = (arc4random() % x) + 1; 最后如果想生成一个浮点数,可以在项目中定义如下宏:#define ARC4RANDOM_MAX 0x100000000 然后就可以使用arc4random() 来获取0到100之间浮点数了(精度是rand()的两倍),代码如下:double val = floorf(((double)arc4random() / ARC4RANDOM_MAX) * 100.0f);实例(从数组中随机显示出一个背景图,再通过网络加载显示出来):self.bgView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];self.bgView.image=[UIImage imageNamed:@"AppBg"];[self.view addSubview:self.bgView];[self.view sendSubviewToBack:self.bgView];NSDictionary *params=[[NSDictionary alloc] init];[[HomeMainNetAPIManager sharedManager] getBackgroundImage:params andBlock:^(id data, NSError *error) {if (!error&&data) {BackgroundImageBean *groundImagebean =(BackgroundImageBean *)data;int dataNum=groundImagebean.data.count;if (groundImagebean.data&&dataNum>0) {int r=arc4random_uniform(dataNum);GroundImageBean *curBean=groundImagebean.data[r];[self.bgView sd_setImageWithURL:[NSURL URLWithString:curBean.ImgUrl] placeholderImage:[UIImage imageNamed:@"AppBg"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {dispatch_async(dispatch_get_main_queue(), ^{self.bgView.image=image;});}];}}}];
7:沙盒路径知识整理
模拟器的路径从之前的~/Library/Application Support/iPhone Simulator移动到了~/Library/Developer/CoreSimulator/Devices/文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library。因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件: Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录 tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除 Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除iTunes在与iPhone同步时,备份所有的Documents和Library文件。 iPhone在重启时,会丢弃所有的tmp文件。查看方法: 方法1、可以设置显示隐藏文件,然后在Finder下直接打开。设置查看隐藏文件的方法如下:打开终端,输入命名 (1)显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true (2)隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false (3)输完单击Enter键,退出终端,重新启动Finder就可以了 重启Finder:鼠标单击窗口左上角的苹果标志-->强制退出-->Finder--> 现在能看到资源库文件夹了。 打开资源库后找到/Application Support/iPhone Simulator/文件夹。这里面就是模拟器的各个程序的沙盒目录了。 方法2、这种方法更方便,在Finder上点->前往->前往文件夹,输入/Users/username/Library/Application Support/iPhone Simulator/ 前往。 username这里写用户名。 自定义类返回各目录路径:#import <Foundation/Foundation.h>@interface ICSandboxHelper : NSObject+ (NSString *)homePath; // 程序主目录,可见子目录(3个):Documents、Library、tmp + (NSString *)appPath; // 程序目录,不能存任何东西 + (NSString *)docPath; // 文档目录,需要ITUNES同步备份的数据存这里,可存放用户数据 + (NSString *)libPrefPath; // 配置目录,配置文件存这里 + (NSString *)libCachePath; // 缓存目录,系统永远不会删除这里的文件,ITUNES会删除 + (NSString *)tmpPath; // 临时缓存目录,APP退出后,系统可能会删除这里的内容 + (BOOL)hasLive:(NSString *)path; //判断目录是否存在,不存在则创建 实现代码:#import "ICSandboxHelper.h"@implementation ICSandboxHelper+ (NSString *)homePath{return NSHomeDirectory(); }+ (NSString *)appPath {NSArray * paths = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask, YES);return [paths objectAtIndex:0]; }+ (NSString *)docPath {NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);return [paths objectAtIndex:0]; }+ (NSString *)libPrefPath {NSArray * paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);return [[paths objectAtIndex:0] stringByAppendingFormat:@"/Preference"]; }+ (NSString *)libCachePath {NSArray * paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);return [[paths objectAtIndex:0] stringByAppendingFormat:@"/Caches"]; }+ (NSString *)tmpPath {return [NSHomeDirectory() stringByAppendingFormat:@"/tmp"]; }+ (BOOL)hasLive:(NSString *)path {if ( NO == [[NSFileManager defaultManager] fileExistsAtPath:path] ){return [[NSFileManager defaultManager] createDirectoryAtPath:pathwithIntermediateDirectories:YESattributes:nilerror:NULL];}return NO; }
转载于:https://www.cnblogs.com/wujy/p/4503381.html
IOS开发基础知识--碎片13相关推荐
- iOS开发基础知识--碎片37
iOS开发基础知识--碎片37 iOS开发基础知识--碎片37 iOS开发基础知识--碎片37 1:iOS 使用NJKWebViewProgress做webview进度条 引入头文件: #import ...
- iOS开发基础知识--碎片44
iOS开发基础知识--碎片44 iOS开发基础知识--碎片44 1:App跳转至系统Settings 跳转在IOS8以上跟以下是有区别的,如果是IOS8以上可以如下设置: NSURL *url = ...
- iOS开发基础知识--碎片27
iOS开发基础知识--碎片27 1:iOS中的round/ceil/floorf extern float ceilf(float); extern double ceil(double); ext ...
- iOS开发基础知识--碎片41
iOS开发基础知识--碎片41 1:UIWebView加载本地的HTML NSString *path = [[NSBundle mainBundle] bundlePath]; NSURL *bas ...
- iOS开发基础知识--碎片19
iOS开发基础知识--碎片19 1:键盘事件顺序 UIKeyboardWillShowNotification // 键盘显示之前 UIKeyboardDidShowNotification // ...
- IOS开发基础知识--碎片33
1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicat ...
- IOS开发基础知识--碎片14
1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包ZipArchive* zipFile = [[ZipArchive alloc] init];//次数得zipfilenam ...
- IOS开发基础知识--碎片45
1:iOS SEL的简单总结 SEL就是对方法的一种包装.包装的SEL类型数据它对应相应的方法地址,找到方法地址就可以调用方法 a.方法的存储位置 在内存中每个类的方法都存储在类对象中 每个方法都有一 ...
- IOS开发基础知识--碎片34
1:第三方插件SKSTableView在IOS7.1.1出现闪退的问题 解决办法,修改其内部源代码: (NSInteger)subRow { id indexpath = [NSIndexPath c ...
最新文章
- 2016/08/27 What I Learned About Going Fast at eBay and Google
- 基于能量的生成对抗网络
- Win10下VisualStudio2019安装和Helloworld测试
- 【UML】时序图Sequence diagram(交互图)(转)
- AJAX实例二:实现类似Google的搜索提示【原著】
- 机器学习 --- 4. 大内密探HMM(隐马尔可夫)围捕赌场老千(转)
- 好看好用的字体软件-字体下载大全提供下载
- win10显卡驱动怎么装_既然大家都说装了win10,就不用鲁大师监测显卡温度,为什么呢?...
- 全国计算机考试 二级 office pdf,全国计算机等级考试二级MSoffice讲义看看[整理].pdf...
- Netplus里的基本概念
- 计算机科学与实践,【计算机科学与技术学院|实践实况】(一)
- 串的子串(模式串)匹配算法
- Extjs--关于文件的下载
- win10新建虚拟机网络配置未连接服务器,Win10系统VMWare虚拟机无法连接网络怎么办?...
- Windows-Windows 10显示两个显示器,两个显示器都能分别显示
- 注意力机制详解(小白入门)
- Jvectormap中文帮助文档(API)
- PTA(02)典例详解(7-48 龟兔赛跑7-49 币值转换7-51 念数字7-53 抓老鼠啊~亏了还是赚了?7-56 谁先倒7-58 输出GPLT7-60 福到了)
- 基于Python Tkinter的多线程局域网扫描器
- 我,看房没戴头盔,损失二十万
热门文章
- 怎样在sqlite3上执行SQL语句
- 大爷去取钱,银行把取款办成存款,大爷拒绝还钱,大家怎么看?
- 云计算与 OpenStack - 每天5分钟玩转 OpenStack(14)
- Misc string test
- VS2008 SP1补丁
- 万维网服务器协议提供web,万维网的HTTP和FTP协议.doc
- 100g流量在电脑上可以用多久_三大运营商5G体验方案出炉!100G一个月够不够?...
- 台式计算机计量单位,计算机的计量单位以及常见的数据类型
- Unity-Find-Script-References 查找脚本的引用
- elastic学习笔记