使用autoLayout实现适配iPhone5

这篇文章是我看到的关于适配iPhone5的文章里写的最好的,所以在这里转发并翻译

有能力的朋友请直接看原文How to Update Your Apps For the 4-Inch iPhone 5 Display

Getting Started

因为是使用AutoLayout实现适配,所以要求Xcode版本至少是4.5.项目是基于作者之前的一个项目的,这里不讨论那个项目,只关注怎一样适配,有兴趣的直接去原文找。


这就是作者的iOS diner project,当这个项目不做任何修改运行在4-inch的iphone模拟器上时,是这样的


出现了正常的黑边。

之前很多人都说,要让苹果认为你已经适配了iphone5 只需要加多一张568高度的launch图就好了,但并不是所有项目都可以不修改任何东西,加多一张图片就可以解决,但是第一步,肯定是要加这张568高度的launch图


加了之后再运行,就会发现黑边不见了,但是..


出现这种情况的原因呢,是因为在写程序的时候,位置都是基于3.5-inch的大小定位。

Working With Constraints

使用autolayout,可以设置view和边界的距离以及设置view的自动扩展和拉伸。

要使用autolayout,首先就要在storyboard的file inspector中勾选。


现在回到Diner这个应用的界面,选择指向右边的红色箭头,可以看到在这个箭头上,已经有AutoLayout的约束(constraints)存在了。


要为view添加相应的约束,可以按storyboard右下角的中间那组按钮的中间那个


下图示添加了一个leading space to superview(和父视图左边界的距离)之后的效果


下面看看此时在4-inch屏下的显示效果


我们看到箭头被拉伸了,此时右边的属性试图显示,这个箭头有三个约束,第二个trailing space to superview,并不是我们加的,是系统给我们加上去的

被拉伸的原因是:这个箭头同时有左边和右边的约束,为了在4-inch情况下,依旧满足这两个约束,图片只能从中间拉伸。

要解决这个问题,只需要将右边的约束去掉就好了。不过我们要确保是在3.5-inch的大小下进行操作。

之所以要在3.5-inch下删除右边的约束,而不是在4-inch情况下的原因是:

当你在4inch情况下删除右边约束的话,Xcode会自己帮你重新加上一个新的width constraint,来保证箭头保持现在这个拉伸的状态,所以在这种情况下删除的话,不仅仅4inch的情况下图标变形,就算是回到3.5inch也会是这样。之所以会这样,是因为当autolayout被启用之后,我们对view所做的任何改变或者约束都会引起Xcode重新计算当前的约束集,并自动添加他觉得有必要的约束去保证让view显示的样子和现在是一样的。

所以这也是为什么当我们在使用autolayout的时候,会经常发现一些你不想要的约束。出现这种情况的时候,删除这个约束是没用的,因为Xcode又会自动帮你加上,你要做的是,创建一个新的约束,知道Xcode觉得你要删除的那个约束是没必要存在的。

回到项目中,当我们在3.5inch下删除右边的约束后,再在4inch状态下显示,就是下面这样啦


不再被拉伸了,下面要做的就是背景要满屏。

因为这张图片并不是为iPhone5的尺寸设计的,所以我们需要有两张不同的背景,当在3.5的时候使用小的那张,4.0得时候使用大的那张。

要判断设备是不是4inch屏幕,可以在XXXX-prefix.pch文件中,在最后一个#endif上面加上下面这句

#define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES)
就是测试当前设备的屏幕的高度是不是568

只需要在添加背景的controller中判断一下是不是iphone5就可以设置相应的背景了

if (IS_IPHONE5) {
    self.ibBackgroundImage.image = [UIImage imageNamed:@"bg_wall-568h.png"];
    self.ibCounter.image = [UIImage imageNamed:@"bg_counter-568h.png"];
}
调整好背景图之后的4inch效果


接下来就是调整下人物图片,添加一个右边的约束


运行的时候,会发现人物下面的label也跟着移动了,但是我们并没有对label手工加设置,是Xcode自动帮我加了约束,这也算是autolayout的好处之一吧



深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值