Xcode 常见问题-开发基础细节

作者: lzt橘子 | 来源:发表于2017-09-25 21:40 被阅读71次

    前言

            对于踏进IOS大门的新手开发人员来说,初始的开发阶段还是有蛮多的坑坑洼洼需要注意的,对比Android开发,就如同java之于object_c,至少目前来说,我认为java的语言和Android的四大组件比IOS的NSObject,UIView更傻瓜易懂,类似的便是kotlin和swift,swift相信不少人会被不同版本的swift搞懵圈过,或许不该想当然的认为swift的版本升级和java的一样,只是多了些新内容,以及被标注为过时的api,swift则是方法声明说换就换,api说删除就删除,苹果还真是有点不近人情呢.

    言归正传,Xcode开发中,有些细节,不管是没接触过的新人还是已经长于生疏老手,还是有记录的必要的,这个不会花太多时间,想到了就记下来,记不清的时候回来看看,还是合算的。


    一 工具

    1 CocoaPods

    (1)终端命令:

    -cd /User/用户名/项目根路径

    -open -a Xcode Podfile   打开Podfile文件后编辑

    -pod install

    (2)Podfile文件格式

    platform :iOS, '9.0'

    target '项目名' do

    pod '库名', '~>3.0'

    pod '文件名'

    end

    2. 模拟器

    (1)联网

    需要在项目的info.list改一下设置

    net-1

    二 Object-C

    1.反射

    (1)根据类名创建NSObject

    配合范型在抽取JSON解析代码用的蛮多.

    r-1

    三 第三方库

    1.Realm

    下载realm.zip后,将该压缩包ios目录中的Realm.framework文件拖到项目中

    然后需要做以下设置,否则会编译报错

    (1)在项目的Target的Build Setting中设置路径:

    realm-1

    (2)在项目的Target的Build Phases中添加这几个lib。

    realm-2

    (2)这些文件是隐藏的,点击➕号后,按以下方式打开。

    点击Add Other...

    realm-3

    使用command+shift+G,输入/usr/lib,点击GO

    realm-4

    选取libc++.dylib ,libc++abi.dylib 和 libc.1.dylib三个即可

    realm-5

    2.MJExtension

    这是一个JSON解析库,优点就是不用继承它,只需要在使用到的.m文件中导入MJExtension.h即可,记住是.m文件,用法蛮神奇,ios上称之为分类。

    3.MJRefresh

    使用时注意在用到该控件的UIViewController的ViewDidLoad()方法内设置以下代码,不然有时会出现UITableView位置异常,头部刷不出来的BUG,

    scroll-1

    四 图片相关

    1.UIImage加载图片的两个方法区别

    (1)[UIImage imageNamed:@"文件名"],图片会被缓存起来,不会立即释放;

    (2)[UIImage imageWithContentsOfFile:path],不再使用时会快速释放图片.

    2.Assets.xcassets蓝色文件夹

    (1)项目自带的Assets.xcassets蓝色文件夹,这个和自建的黄色文件夹的区别:

    a.蓝色文件里面的图片不支持缓存,因为这个文件里面的图片无法根据图片的路径读取,只能使用[imageNamed:]方法加载,该方法加载的图片会被系统缓存起来,所以图标什么的都扔这里就行,大图比如启动图,引导图之类的建议放到自建的黄色文件夹里.

    b.在使用[UIImage imageNamed:@"文件名"]加载图片时,蓝色文件夹的图片只需要填文件名,其它位置的文件夹的图片最好加上文件名.jpg这样的图片格式后缀.

    (2)如果碰到运行时图标的颜色和原本的颜色不对,例如下图绿色的图标运行时显示为蓝色:

    assets-1

    点击Assets.xcassets文件,设置Render As选项选择Original Image即可.

    assets-2

    3.测定网络图片的宽度和高度

    这种需求会出现在需要动态计算图片宽高的地方,比如瀑布流,一般瀑布流的图片宽度是指定的,我们需要动态计算不同位置的Cell中包含的图片高度,进而算出整个Cell的高度:

    以下代码最好在请求网络数据的子线程中执行或者开辟子线程计算,否则可能会造成卡顿。

    image-1

    五 原生控件

    1.UINavgationBar和UITabBar

    (1)去除横线,设置背景颜色/图片,设置阴影

    按下面代码设置即可

    nav-1

    (2)隐藏UINavigationBar

    按下图设置代码

    nav-2

    (3)自定义导航栏左右按钮

    spaceItem可以用来调整按钮相对于屏幕边缘的间距,不设置的话,会有一个固定的间隔。

    nav-3

    (4)统一更改状态栏和导航栏字体颜色为白色

    在info.list中添加以下两项设置即可

    nav-4

    (5)计算self.navigationItem.titleView的可用宽度

    nav-5

    (6)自定义的self.navigationitem.titleView里面UIButton的文本不显示的问题

    不要用btn.titleLabel.text属性,用setTitle方法设置文本。

    nav-6

    2.UITableViewCell

    (1)为自定义的Cell中的控件设置点击等事件

    五步

    a.在自定义的cell的.h文件定义一个protocol协议,协议方法可以按自己需求声明。

    cell-1

    b.在该自定义的cell的.m文件中声明下图的selector方法.

    cell-2

    c.在cell中,为控件添加上图的selector方法

    cell-3

    d.在使用改自定义cell的UIViewController中声明改协议

    cell-4

    e.最后实现改协议的方法即可.

    cell-5

    3.UILable

    (1)指定了UILable的高度,文本高度小于UILable的高度,需要文本的top方向那边内边距为0,一般就是要求文本对齐左上角.

    需要注意的地方就是,设置numberOfLines和frame的代码要在重新计算frame之前,如果在frame计算之后设置 numberOfLines的话,之后设置的行数不会生效。

    label-1

    (2)需要多行显示:

    两句代码:

    label.numberOfLines = 0;

    label.lineBreakMode = UILineBreakModeWordWrap;


    六 动画

    (1)起始和结束

    现在只需要Blok块即可完成各种动画

    animation-1

    结语

             后面会慢慢补充,另外这周会分享一些IOS的小控件,IOS 在自定义控件方面,有很多比Andoid优秀的地方,尤其只需要通过计算各个frame即可绘制或者搭建不同的UI,这点确实很有利于快速搭建自定义控件,对于那些擅长通过计算来实现UI的人来说确实如此。

    相关文章

      网友评论

        本文标题:Xcode 常见问题-开发基础细节

        本文链接:https://www.haomeiwen.com/subject/aiidextx.html