iOS
文章平均质量分 51
刘新林
斜杠青年
展开
-
iOS经典讲解之播放本地音频文件
/*** 播放音效文件** @param name 音频文件名称 */- (void)playSoundEffect:(NSString *)name { NSString *audioFile=[[NSBundle mainBundle] pathForResource:name ofType:@"mp3"]; NSURL *fileUrl=[NSURL fileURLWithPath:audioFile]; //1.获得系统声音ID SystemS...原创 2021-06-28 10:24:19 · 1922 阅读 · 0 评论 -
iOS经典讲解之微信SDK更新后需要UniversalLink解决方案
一:微信更新1.8.6的SDK后,在delegate注册时多了一个universalLink参数(如下)+ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;不管你是友盟还是ShareSDK等等,只要是最新版的应该都需要这个参数,参考:微信官方文档,经验总结如下。本文将介绍如何配置U...原创 2020-01-11 11:23:50 · 8416 阅读 · 2 评论 -
iOS经典讲解之图片拉伸的几种方法
1、通过UIImageView的属性image来设置图片会根据UIImageView的宽高自动拉伸,这样有比较大的的缺陷,就是会失真和变形UIImage *image = [UIImage imageNamed:@"pao"];NSLog(@"%lf %lf", image.size.width, image.size.height);UIImageView *img_test = [原创 2016-09-07 19:46:40 · 5233 阅读 · 0 评论 -
iOS经典讲解之UIButton改变图片和文字的位置
作者:刘新林转载请标明出处:UIButton的image和titleLabel是靠在一起居中显示的,默认image在左,titleLabel在右,但是有些情况要求两者交换位置显示,可以通过@property(nonatomic) UIEdgeInsets imageEdgeInsets; // default is UIEdgeInsetsZero@property(nonatomic) UIEdgeInsets titleEdge原创 2016-09-02 12:57:58 · 6072 阅读 · 1 评论 -
iOS经典讲解之正则表达式判断手机号码
作者:Loving_iOS转载请标明出处:- (BOOL)checkMobile:(NSString *)mobileNum{ /** * 手机号码 * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,183,187,188 * 联通:130,131,132,152,155,156,185,186 * 电信:133,1349,153,180,189 */ NSString原创 2016-03-03 11:09:43 · 1215 阅读 · 0 评论 -
iOS经典讲解之NSTimer、CADisplayLink、GCD三种定时器的使用
作者:Loving_iOS转载请标明出处:http://blog.csdn.net/loving_ios/article/details/50800992在应用开发过程中,会遇到很多需要循环执行或者间隔执行任务的需求,这事就会遇到定时器的使用,下面介绍三种常用的定时器NSTimer、CADisplayLink和GCD三种定时器的使用。原创 2016-03-04 11:17:37 · 4641 阅读 · 0 评论 -
iOS经典讲解之Apple Pay开发
作者:Loving_iOS转载请标明出处:http://blog.csdn.net/loving_ios/article/details/50678207Apple Pay,是苹果公司在2014苹果秋季新品发布会上发布的一种基于NFC的手机支付功能,于2014年10月20日在美国正式上线。Apple Pay 自上线来,已经占据数字支付市场交易额的 1%。三分之二的Apple Pay 新用户在 11 月份多次使用这项服务。Apple Pay 用户平均每周使用Apple Pay 1.4 次。2016年原创 2016-02-26 10:52:01 · 2807 阅读 · 0 评论 -
iOS经典讲解之设置颜色注意事项
在开发中无意中发现的问题,之前给控件设置颜色发现没有效果,不知道是什么问题。弄得晕头转向的,盯着代码看无意之间发现问题,其实colorWithRed: green: blue: alpha:方法中,值的取值范围是在0~1之间,而我赋值的时候,颜色RGB的值是通过吸管吸取的,没有动脑子,就把值直接赋给了方法,所以出错。错误方法:view.backgroundColor = [UIColor原创 2016-01-25 12:39:05 · 492 阅读 · 0 评论 -
iOS经典讲解之UIAlertView的使用技巧
作者:Loving_iOS转载请标明出处:- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(原创 2016-02-17 09:36:59 · 514 阅读 · 0 评论 -
iOS经典讲解之使用instruments检测内存
这里是原文入门为了节省大家的时间,提供一个演示的Demo给大家。代码传送门. 下载后解压然后用xcode打开。 编译运行APP后 然后在搜索框内输入任意词汇,点击结果你会看到下面的结果 正如你所见的,这个app很简单.程序其实调用的是Flickr的API,通过app顶部的搜索框执行搜索后在下面的tableview显示你搜索翻译 2016-02-26 15:01:07 · 10148 阅读 · 0 评论 -
iOS经典讲解之倒计时按钮JKCountDownButton的使用
作者:Loving_iOS转载请标明出处:http://blog.csdn.net/loving_ios/article/details/50786890下载倒计时按钮JKCountDownButton 代码传送门JKCountDownButton,实现iOS倒计时按钮,常用于注册等发送验证码的时候进行倒计时操作。下面介绍其用法:代码方式创建:JKCountDownButton *button = [JKCountDownButton buttonWithType:UIButtonTypeCus原创 2016-03-03 21:18:09 · 4878 阅读 · 2 评论 -
iOS经典讲解之UIImage初始化一张图片的方法及优缺点
作者:Loving_iOS转载请标明出处:UIImage *image = [UIImage imageNamed:@"test.png"];这个方法创建的图片是从缓存里面获取的,先在缓存里查看,看是不是有这个图片,没有的话见图片添加到缓存再使用。有的话直接使用缓存里面的。在程序中,如果这个图片要在多个地方使用的话,建议使用这个方法。缺点是:一旦加入到缓存中就一直占用内存,不能被释放掉。原创 2015-11-20 16:31:18 · 3238 阅读 · 0 评论 -
iOS经典讲解之网络编程 TCP/UDP HTTP
一、HTTP协议的主要特点:(摘自 仰望星空 的博客)重点内容 1. CS模式 2. 简单快速:只需要传送请求方法和路径。(常用方法有GET,HEAD,POST) 3. 灵活:任意对象都可以,类型由Content-Type加以标记 4. 无连接、无状态 即每次连接只处理一个请求,对于事务处理没有记忆能力 http表示要通过HTTP协议来定位网络资源;host表示合法的Inter转载 2015-12-28 21:44:19 · 8068 阅读 · 1 评论 -
iOS 中 Autolayout 优先级的使用
一、约束的优先级1,简单介绍在Autolayout中每个约束都有一个优先级,优先级的范围是1 ~ 1000,默认创建的约束优先级是最高的1000。在我理解约束优先级核心就是是为了 "如果存在多套约束的情况下,解决约束冲突" 的问题。有些场景需要动态进行布局,比如我们竖着放了三个按钮:如果要求在运行过程中第二个紫色方块有时存在,有时候不存在,如果第二个方块不存在的时候,第转载 2016-11-03 10:23:06 · 2075 阅读 · 0 评论 -
iOS经典讲解之cocoapods的安装及更新
一、安装更新cocoapods1.安装RVM(1)安装RVM$ curl -L get.rvm.io | bash -s stable(2)测试是否安装正常 (推出重新打开终端查看)$ rvm -v2.用RVM升级Ruby(1)查看当前ruby版本 ruby -v(2)列出已知的ruby版本 rvm list known(3)安装rub...原创 2016-11-29 21:46:27 · 1562 阅读 · 0 评论 -
iOS经典讲解之UITableView 去掉底部多余的行和分割线
设置tableView的style为UITableViewStyleGrouped时不会出现这种情况,当设为UITableViewStylePlain 时tableView的底部会出现多余的行和分割线原创 2017-04-07 11:50:02 · 3103 阅读 · 0 评论 -
iOS经典讲解之通过setValue: forKeyPath:设置属性(iOS 13不支持该方式修改私有属性!!!)
UITextField的placeholder的颜色和字体:1、方案一(iOS13已不支持该方案,提倡方案二)textField.placeholder = @"请输入用户名!"; [textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"]; [textField setVal...原创 2018-11-16 15:30:04 · 2665 阅读 · 0 评论 -
iOS经典讲解之Xcode10打开旧项目报错解决方案
近期升级Xcode10后,运行原来的项目会出现各种报错,大致分为下面两种,附带解决方案。一、Multiple commands produce 错误方案:进入Xcode->File-> Workspace Setting... ->Build System->Legacy Build System ->Done 二、libstdc++ 库报错(...原创 2018-09-27 16:20:47 · 3103 阅读 · 0 评论 -
iOS经典讲解之App上架(可供销售)后App Store搜索不到的解决办法
App好不容易审核通过了,手动发布版本后,不断地在App Store搜索,就是搜不到,都是苹果的缓存机制惹的祸。急不急,一般情况下发布版本后几个小时或者更短时间App Store就会显示,但是有的时候甚至一两天都没有,怎么办,寻求苹果客服顾问帮助当然是一种最保险的方法。但是对于那种求人不如求己的人来说,下面的办法可谓最好不过了,亲测有效。解决方案:修改可修改内容,保存!!!已发布版本后Ap...原创 2018-09-12 16:13:31 · 5785 阅读 · 0 评论 -
iOS经典讲解之解决集成百度鹰眼上传App Store经常出现的问题
学习视频,点击这里!!!如果应用集成百度鹰眼,在打包上传App Store时提示一大堆错误,其中有一条错误代码是90087。问题描述:可以直接使用鹰眼iOS SDK进行开发测试,但是上架到APP STORE时,由于苹果公司的要求,只能使用真机对应CPU架构的SDK,所以需要开发者需要使用lipo命令合成自身需要的CPU架构版本的SDK。解决方案如下。1.从你的工程中找到BaiduT...原创 2018-08-21 16:59:59 · 1664 阅读 · 0 评论 -
iOS经典讲解之初始化经纬度数组
CLLocationCoordinate2D *coors = malloc([arr_points count]*sizeof(CLLocationCoordinate2D)); for (int i=0; i<arr_points.count; i++) { IndexModel *model = arr_points[i]; ...原创 2018-08-07 09:42:13 · 782 阅读 · 0 评论 -
iOS经典讲解之长按手势执行多次解决办法
添加长按手势会出现方法响应多次的情况 UILongPressGestureRecognizer *touch = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; [self addGestureRecognizer:touch]; 解决方法:根据手...原创 2018-08-14 16:00:06 · 7583 阅读 · 0 评论 -
iOS经典讲解之pch文件import注意事项
把常用的定义或者 import 放在 pch 中,这样在不用在项目中再引用和定义了,即可以做到全局 macro,又可以作为全局 import 用。然而在使用一些用C 和 C++ 编译的类库时,都无法编译通过,出现类似很多类名 not found,甚至是 NSString 都未找到!发现 pch 文件对于 C 的文件一样起作用。试想一下,C 的代码引用 OC 的代码,会出现什么?当然是编译失败!问题找到了,如何让 C 的文件编译的时候不引用 OC 的代码呢?原创 2018-01-03 10:41:03 · 1117 阅读 · 0 评论 -
iOS经典讲解之适配iOS 11那些事-持续更新...
作者:刘新林转载请标明出处:http://blog.csdn.net/loving_ios/article/details/785736301、访问相册权限 NSPhotoLibraryAddUsageDescription有的文章中提及iOS 11将访问相册权限的NSPhotoLibraryUsageDescription改成了NSPhotoLibraryAddUsageDescription。实际并非如此通过官方API 解释iOS 10新增的访问相册权限是infoplist文件需要添加NSPhot原创 2017-11-19 12:43:18 · 1754 阅读 · 0 评论 -
iOS经典讲解之开发者账号对比
开发者账号分类类型特点限制费用($)个人账号用于个人开发者进行开发和向App Store上传应用只能有一个开发者,并且调试设备数量受限99$公司账号用于公司或团队进行开发和向App Store上传应用可以有多个开发者,并且调试设备数量受限99$企业级账号用于企业内部发布,不需要审核,但也不能发布应用到App Store任何设备都可以通过苹果OTA方式进行安装299$教育账号苹果给教育机构的原创 2017-11-15 11:24:50 · 630 阅读 · 0 评论 -
iOS经典讲解之svn常用的终端命令
1、将文件checkout到本地目录svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain 简写:svn co2、往版本库中添加新的文件 svn add file 例如:svn add test.php(添加test.php) svn add *.php(添加当...原创 2017-11-15 10:49:18 · 507 阅读 · 0 评论 -
iOS经典讲解之变更Xcode checkout项目的svn地址
作者:刘新林转载请标明出处: 在实际开发中会经常遇到服务器迁移的情况,从而svn服务器的地址发生了变化,原先Xcode下载的代码无法控制,又不想重新down一份代码,怎么样修改掉已经存在的代码的svn地址换成新ip那,下面方法实操可以成功,仅供参考。原创 2017-03-02 11:38:51 · 2293 阅读 · 0 评论 -
iOS经典讲解之Socket使用教程
如果需要在项目中像QQ微信一样做到即时通讯,必须使用socket通讯,本人也是刚学习,分享一下,有什么不对的地方希望大家指正ios原生的socket用起来不是很直观,所以我用的是AsyncSocket这个第三方库,对socket的封装比较好,只是好像没有带外传输(out—of-band) 如果你的服务器需要发送带外数据,可能得想下别的办法环境下载AsyncSocketh原创 2015-12-30 15:19:11 · 1407 阅读 · 0 评论 -
iOS经典讲解之判断App是否第一次启动
作者:Loving_iOS转载请标明出处:方法一、在didFinishLaunchingWithOptions方法中加入如下代码:if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]){[[NSUserDefaults standardUserDefaults] setBool:YES fo原创 2015-12-30 16:58:29 · 8740 阅读 · 2 评论 -
iOS经典讲解之复杂对象的数据持久化-归档与反归档
自定义类Person.h@interface PersonModel : NSObject /** * 复杂对象最持久化 需要遵守一个协议 */@property (nonatomic, retain) NSString *name;@property (nonatomic, assign) NSInteger age;@property (nonatomic, retai原创 2015-09-15 23:15:20 · 2004 阅读 · 0 评论 -
iOS经典讲解之Objective-C关联对象的内存管理
@关联对象的内存管理:如果两个或者两个以上的对象存在关联,那么在内存管理方面要比一个对象的内存管理复杂一些,下面通过一个简单的例子来讲解一下关联对象的内存管理问题:创建一个Pet(宠物)类:#import @interface Pet : NSObject{ // 无实例变量}// 声明一个行为方法- (void)play;@end#import "Pet原创 2015-09-26 16:39:10 · 1646 阅读 · 0 评论 -
iOS经典讲解之Objective-C属性的内存管理原理
@在进行讲解属性的内存管理之前,先来看看之前我们使用实例变量时是怎样管理内存的:我们创建两个相关联的类Person类和Pet类,来看看它们中的赋值和取值方法是怎样管理内存的:Pet.h#import @interface Pet : NSObject{ NSString *_name;}// 声明赋值 取值方法- (void)setName:(NSS原创 2015-09-27 12:02:55 · 729 阅读 · 1 评论 -
iOS经典讲解之UICollectionView
//// RootViewController.m// LessonUICollectionView//#import "RootViewController.h"@interface RootViewController () //UICollectionViewDelegateFlowLayout该类遵守了UICollectionViewDelegate// 实际上UIC原创 2015-09-21 16:50:44 · 608 阅读 · 0 评论 -
iOS经典讲解之Objective-C内存管理基础知识及内存管理黄金原则
在进行讲解内存管理之前先来了解一下内存的基础知识:1、内存区的划分:栈区(stack): ①栈区主要存储局部变量以及函数的参数。函数调用的过程其实就是入栈出栈的过程。(先进后出,后进先出)②栈空间的分配是从高到低分配,从低到高存储。③管理方式:系统自动进行管理,不需要我们手动管理。堆区(heap): 经过排序的树形结构,通常是二叉树, 常用来实现优先队列堆的存取,是原创 2015-09-25 18:47:15 · 794 阅读 · 0 评论 -
iOS经典讲解之iOS8新特性UIAlertController
苹果秋季产品发布会刚刚结束,并且刚刚发布iOS9正式版,伴随着新产品和新系统,可以体验用户体验带来的快感之外。对于我们程序员来说最重要的,并不是这些,而是又有一大堆的方法被弃用,随之一些新方法加入,我们又要默默的点一支烟好好的学习一下了,谁让我们是攻城狮那。今天来介绍一下iOS8之后的新特性UIAlertController,大家看是不是很眼熟,没错它就是今天的主角,它也是iOS9被弃用方法的替代原创 2015-09-17 21:22:19 · 828 阅读 · 1 评论 -
iOS经典讲解之多线程GCD的应用
@implementation RootViewController- (void)viewDidLoad { [super viewDidLoad]; // [self serialQueue]; // [self concurrentQueue]; [self gameStar]; }#pragma mark ----------------创原创 2015-09-22 22:53:59 · 591 阅读 · 0 评论 -
iOS经典讲解之妙用UITextView
// 添加textView- (void)addTextView{ //UITextView可以使用父类的初始化方法initWithFrame:也可使用iOS7.0出现的自己独有的的初始化方法initWithFrame:textContainer: //textContainer:是text接受者 可以为nil // 讲解如果使用initWithFrame:textCo原创 2015-09-19 11:41:05 · 2761 阅读 · 0 评论 -
iOS经典讲解之多线程应用场景
通过下面一个例子来了解一下多线程的应用场景,我们可以通过点击按钮来开始或者暂停动画的播放,但是当我们点击另一个按钮时,就会执行一个方法,在该方法中循环打印一个很大的数字,在打印过程中,再通过点击播放/暂停按钮来控制动画已经无法做到了,这时屏幕已经卡死,必须等待打印完成,才能控制动画的播放。如何既能打印又能控制动画的播放那,可以利用多线程来完成,将打印交给子线程去完成就可以了,下面讲了几原创 2015-09-22 20:23:40 · 5174 阅读 · 0 评论 -
iOS经典讲解之线程锁NSLock案例(卖火车票)
#import "RootViewController.h"@interface RootViewController ()// 声明总票数@property (nonatomic, assign) NSInteger totalTickets;// 声明剩余票数@property (nonatomic, assign) NSInteger subTickets;// 线程锁@p原创 2015-09-23 23:11:03 · 1329 阅读 · 0 评论 -
KVC在定义Model类中的妙用
@我们应用程序使用MVC架构的话,对于处理数据类,我们会单独的定义Model类,在里面为要展示的属性进行初始化赋值,一般采用的方法是通过定义对应的属性,挨个赋值.现在我要介绍的就是通过KVC,key-value的方式,进行赋值. @先来看一段代码:转载 2015-09-12 18:12:37 · 689 阅读 · 0 评论