iOS9-by-Tutorials-学习笔记六:UIStackView-Auto-Layout-Changes

2023-05-16

iOS9-by-Tutorials-学习笔记六:UIStackView-Auto-Layout-Changes

本文版权归作者所有,如需转载请联系孟祥月
CSDN博客:http://blog.csdn.net/mengxiangyue
独立博客:http://mengxiangyue.com

今天这是第六篇笔记,现在回过头去看,我也没有想到自己能够更新到第六篇。我算是一个比较懒的人了,现在已经不太喜欢动手敲代码了。在写这几篇笔记的时候,我需要一边看英文的文档,一边测试代码,还得考虑怎么能够写明白。这里有点说明,我的英语水平只是四级,语文水平只能用呵呵评价了,文章中的语句难免会有不通顺的地方,希望能够把语义表述清楚。

闲话多了,回到正题,这篇文章介绍UIStackView和一些Auto Layout的改变。

UIStackView我个人理解是为了解决使用Storyboard添加的约束需要经常变化的情况。我想我们可能都在开发中遇到过修改约束的情况,一般是把约束与一个outlet的约束link起来,然后代码修改,但是这个操作起来是不方便的。UIStackView通过修改一些简单的属性,例如alignment, distribution, and spacing,从而让UIStackView根据我们的修改自动调整内部的显示。

Auto Layout的改变主要是介绍layout anchors和layout guides。

Getting Started

打开本章的配套的工程VacationSpots,在iPhone 6模拟器上运行,能够看到APP有一些UI的问题,不要担心,在后面将会修复这些问题。简单梳理一下问题如下:
1. 图中标出的内容没有在垂直方向居中

  1. 点击列表中的London Cell进入详情页面,最下面的三个按钮没有平均分配空间:

  2. 点击WEATHER旁边的hide按钮,内容是被隐藏了,但是留下了一块空白,下面的内容没有移动上来:

  3. WHAT TO SEE 部分在WHY VISIT的下面会更加合理一点。

现在已经了解了这些问题,下面开始用UIStackView来修改这些问题。打开Main.storyboard,查看如下的Controller scene:

能够注意到上面的每个对应的控件都有背景颜色,这个只是为了帮助我们查看这些属性的变化。这些背景颜色在运行的时候都会被去掉,通过如下代码,如果你想让它们在运行的时候也显示注释掉这些代码就可以:

// SpotInfoViewController.swift
 override func viewDidLoad() {
    super.viewDidLoad()

    // Clear background colors from labels and buttons
    for view in backgroundColoredViews {
      view.backgroundColor = UIColor.clearColor()
    }

    ........
  }

在Storyboard中的的控件都通过outlet与SpotInfoViewController.swift中对应的属性进行了关联。在storyboard中显示的名字对应SpotInfoViewController.swift对应的变量。

Your first stack view

我们先用Stack View解决我们问题列表中底部按钮的问题。使用UIStackView能够在一个坐标抽上分配位置和控件之间的空间。幸运的是将Views嵌入到UIStackView中并没有太难。在Storyboard中的Spot Info View Controller选择如下三个按钮控件:

选择好三个按钮后,在Storyboard中点击如下的按钮:

当Views被嵌入UIStackView之后,Views的约束都被移除了,同时需要设置UIStackView的约束。选中UIStackView,然后按照如图添加约束:

这里有个选择UIStackView的技巧,由于UIStackView是在按钮的后面,很不好选中,我们可以按住Shift,右击,在出现的菜单中列出来当前点击位置所有的View,我们可以选择UIstackView。另一种方法我们可以在outline view中选择。

设置好约束后,能够看到按钮显示如下,第一个按钮被拉伸了,填充满了UIStackView的剩余空间。UIstackView有一个Distribution属性,用于控制Views怎么在UIStackView中显示,现在设置的是Fill,即将会填充满UIStackView。为了这个目的,UIstackView将会根据View的ccontent hugging优先级去拉伸View,最低的将会被拉伸。如果优先级一样,将会拉伸第一个。

我们的目的是让View间的距离相等,在Attributes inspector中修改Distribution为Equal Spacing。

运行APP,能够看到我们的按钮显示正确了:

一些思考

思考一下你使用Auto Layout,通过约束实现上面的要求,那将是一种什么令人”愉悦”的行为。可能你很熟悉Auto Layout,认为这些东西都很简单,那么你在考虑一下如果我们后面有需求添加一个按钮,删除一个按钮呢,怎么办呢?约束删除了重新添加吗?如果使用UIStackView,这些将变得比较简单,只要我们添加或者删除View,其他的工作UIstackView就会帮我们做了。

UISTackView的更加深入的讲解,将会在下一篇文章中继续介绍。这里先介绍一下Auto Layout的新特性:layout anchors和layout guides。

Layout anchors

Layout anchors提供了我们一种简单的创建约束的方式。

想象一下我们在iOS 9之前创建一个约束,简直就是天书,但是在iOS 9中使用Layout anchors将会简单好多,下面是两种的对比:

// iOS9以前
let constraint = NSLayoutConstraint(item: topLabel, attribute: .Bottom, relatedBy: .Equal, toItem: bottomLabel, attribute: .Top, multiplier: 1, constant: 8)

// iOS 9
let constraint = topLabel.bottomAnchor.constraintEqualToAnchor(bottomLabel.topAnchor, constant: 8)

Layout anchors不仅理解起来简单,而且写起来也简单了。

对应于我们在iOS 9以前添加约束时候的attribute,基本都有与之对应的anchor,例如top对应topAnchor,bottom对应bottomAnchor等。Layout Anchor都是直接或者间接继承自NSLayoutAnchor,上面只是演示了一下相等的情况,我们都知道在约束中又大于小于等,下面列出NSLayoutAnchor的接口文件,从接口文件中能够清楚的了解到对应的方法:

import Foundation
import UIKit

/*  NSLayoutAnchor.h
    Copyright (c) 2015, Apple Inc. All rights reserved.
*/

/* An NSLayoutAnchor represents an edge or dimension of a layout item.  Its concrete 
 subclasses allow concise creation of constraints.  
    Instead of invoking 

 +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:] 

 directly, you can instead do something like this:

 [myView.topAnchor constraintEqualToAnchor:otherView.topAnchor constant:10];

 The -constraint* methods are available in multiple flavors to support use of different
 relations and omission of unused options.
 */

@available(iOS 9.0, *)
public class NSLayoutAnchor : NSObject {

    /* These methods return an inactive constraint of the form thisAnchor = otherAnchor.
     */
    public func constraintEqualToAnchor(anchor: NSLayoutAnchor!) -> NSLayoutConstraint!
    public func constraintGreaterThanOrEqualToAnchor(anchor: NSLayoutAnchor!) -> NSLayoutConstraint!
    public func constraintLessThanOrEqualToAnchor(anchor: NSLayoutAnchor!) -> NSLayoutConstraint!

    /* These methods return an inactive constraint of the form thisAnchor = otherAnchor + constant.
     */
    public func constraintEqualToAnchor(anchor: NSLayoutAnchor!, constant c: CGFloat) -> NSLayoutConstraint!
    public func constraintGreaterThanOrEqualToAnchor(anchor: NSLayoutAnchor!, constant c: CGFloat) -> NSLayoutConstraint!
    public func constraintLessThanOrEqualToAnchor(anchor: NSLayoutAnchor!, constant c: CGFloat) -> NSLayoutConstraint!
}

/* Axis-specific subclasses for location anchors: top/bottom, leading/trailing, baseline, etc.
 */

@available(iOS 9.0, *)
public class NSLayoutXAxisAnchor : NSLayoutAnchor {
}

@available(iOS 9.0, *)
public class NSLayoutYAxisAnchor : NSLayoutAnchor {
}

/* This layout anchor subclass is used for sizes (width & height).
 */

@available(iOS 9.0, *)
public class NSLayoutDimension : NSLayoutAnchor {

    /* These methods return an inactive constraint of the form 
        thisVariable = constant.
    */
    public func constraintEqualToConstant(c: CGFloat) -> NSLayoutConstraint!
    public func constraintGreaterThanOrEqualToConstant(c: CGFloat) -> NSLayoutConstraint!
    public func constraintLessThanOrEqualToConstant(c: CGFloat) -> NSLayoutConstraint!

    /* These methods return an inactive constraint of the form 
        thisAnchor = otherAnchor * multiplier.
    */
    public func constraintEqualToAnchor(anchor: NSLayoutDimension!, multiplier m: CGFloat) -> NSLayoutConstraint!
    public func constraintGreaterThanOrEqualToAnchor(anchor: NSLayoutDimension!, multiplier m: CGFloat) -> NSLayoutConstraint!
    public func constraintLessThanOrEqualToAnchor(anchor: NSLayoutDimension!, multiplier m: CGFloat) -> NSLayoutConstraint!

    /* These methods return an inactive constraint of the form 
        thisAnchor = otherAnchor * multiplier + constant.
    */
    public func constraintEqualToAnchor(anchor: NSLayoutDimension!, multiplier m: CGFloat, constant c: CGFloat) -> NSLayoutConstraint!
    public func constraintGreaterThanOrEqualToAnchor(anchor: NSLayoutDimension!, multiplier m: CGFloat, constant c: CGFloat) -> NSLayoutConstraint!
    public func constraintLessThanOrEqualToAnchor(anchor: NSLayoutDimension!, multiplier m: CGFloat, constant c: CGFloat) -> NSLayoutConstraint!
}

在上面的接口文件中,我们能够清楚的了解到NSLayoutAnchor有三个子类:NSLayoutXAxisAnchor,NSLayoutYAxisAnchor,NSLayoutDimension。下面列出了UIView的Anchor都是对应的那种类型:

extension UIView {
    /* Constraint creation conveniences. See NSLayoutAnchor.h for details.
     */
    @available(iOS 9.0, *)
    public var leadingAnchor: NSLayoutXAxisAnchor { get }
    @available(iOS 9.0, *)
    public var trailingAnchor: NSLayoutXAxisAnchor { get }
    @available(iOS 9.0, *)
    public var leftAnchor: NSLayoutXAxisAnchor { get }
    @available(iOS 9.0, *)
    public var rightAnchor: NSLayoutXAxisAnchor { get }
    @available(iOS 9.0, *)
    public var centerXAnchor: NSLayoutXAxisAnchor { get }

    @available(iOS 9.0, *)
    public var topAnchor: NSLayoutYAxisAnchor { get }
    @available(iOS 9.0, *)
    public var bottomAnchor: NSLayoutYAxisAnchor { get }
    @available(iOS 9.0, *)
    public var firstBaselineAnchor: NSLayoutYAxisAnchor { get }
    @available(iOS 9.0, *)
    public var lastBaselineAnchor: NSLayoutYAxisAnchor { get }
    @available(iOS 9.0, *)
    public var centerYAnchor: NSLayoutYAxisAnchor { get }

    @available(iOS 9.0, *)
    public var widthAnchor: NSLayoutDimension { get }
    @available(iOS 9.0, *)
    public var heightAnchor: NSLayoutDimension { get }
}

上面UIView的Anchor属性被分成了三类,同样我们在设置属性的时候,也要求同类的属性的才能设置,比如ViewA和ViewB之间的约束,ViewA-topAnchor和ViewB-bottomAnchor是可以的,ViewA-topAnchor和ViewB-leftAnchor就是不允许的,如果这样的话编译器会警告,运行时也会报错。

注意: whyVisitLabel.topAnchor.constraintEqualToAnchor(whatToSeeLabel.leftAnchor) 这个按照上面的说法应该会报错的,但是我在运行的时候也没有报错,可能是我这里只是随便写出一个做测试的原因,后续我会继续试验一下这个知识点,然后再改正。

Layout guides

有时候我们想设置两个View之间的空间,需要在两个View之间添加一个不可见的View(dummy view),然后在设置约束。Layout guide可以理解为一个隐形的不可见View,我们能够使用它的矩形边缘来布局,我们可以像我们使用View一样设置约束。使用Layout guide的好处是轻量,而且不会在view的层级中,也不会参与事件的响应过程。layout guide也包含除了firstBaselineAnchor和lastBaselineAnchor之外的View所有的Anchor。

Fixing the alignment bug

下面就利用layout guide来修复列表页面文字内容上下不居中的问题。看下图是我们设置的约束,我们设置label距离上面的距离是15,当下面的label显示一行的时候是正常的,如果要是两行了,由于上面的约束是固定的,最终就变成了不居中的效果了。

在iOS 9之前,我们想解决这个问题可以把两个label放置到一个container view容器中,设置这个container view为剧中,这里面的container view就是不可见的view即dummy view。现在在iOS 9上我们可以使用layout guide来代替这个view。

目前只能通过代码来添加layout guide。打开VacationSpotCell.swift文件,修改对应代码:

override func awakeFromNib() {
    super.awakeFromNib()

    // TODO: Add layoutGuide code here to center the name and locationName labels vertically

    // 创建layou guide
    let layoutGuide = UILayoutGuide()
    contentView.addLayoutGuide(layoutGuide)

    // 设置layout guide的约束
    let topConstraint = layoutGuide.topAnchor.constraintEqualToAnchor(nameLabel.topAnchor)
    let bottomConstraint = layoutGuide.bottomAnchor.constraintEqualToAnchor(locationNameLabel.bottomAnchor)
    let centerConstraint = layoutGuide.centerYAnchor.constraintEqualToAnchor(contentView.centerYAnchor)

    // 激活layout guide的约束
    NSLayoutConstraint.activateConstraints([topConstraint, bottomConstraint, centerConstraint])
  }

运行APP发现,部分文字被截断了:

处理截断问题

这个原因是我们设置layout guide居中,但是nameLabel(上面的)与super view top的约束还存在,造成了下面的label被挤压了,这时候我们只要删除掉这个约束就可以了。但是删除了之后storyboard会提示错误,这时候我们可以使用占位约束,这个主要是为了使storyboard不报错,在运行的时候并不会使用。

最近一直在加班,断断续续整理了好久终于整理完了这篇文章了,可能会有错误,还请大家指出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS9-by-Tutorials-学习笔记六:UIStackView-Auto-Layout-Changes 的相关文章

  • 解决M1芯片 MAC 下 Goland(Intellij系列都适用) 无法 Debug 的问题

    解决M1芯片 MAC 下 Goland xff08 Intellij系列都适用 xff09 无法 Debug 的问题 解决M1芯片 MAC 下 Goland xff08 Intellij系列都适用 xff09 无法 Debug 的问题报错信
  • Java例15.13——使用MVC结构计算三角形面积

    MVC是一种通过模型 视图 控制器构造一个软件或组件的理想办法 在例15 13中首先编一个封装三角形的类 xff0c 然后再编写一个窗口 要求窗口使用3个文本框和1个文本区为三角形对象中的数据提供视图 xff0c 其中3个文本框用来显示和更
  • 网卡远程唤醒功能

    远程唤醒功能配置文档 功能简介 网络唤醒功能可以让用户从一个局域网或者是跨网络环境中远程管理一台或者是多台计算机的开关机状态 下面是在ubuntu桌面版上实现远程唤醒功能的设置步骤 第一步 xff1a 计算机BIOS设置 在计算机开机时按F
  • Python 典藏篇-Microsoft Visual C++ 14.0 is required,官方vc++运行库工具一键式解决!

    Python 典藏篇 Microsoft Visual C 43 43 14 0 is required xff0c 官方vc 43 43 运行库工具一键式解决 xff01 前言 xff1a error Microsoft Visual C
  • LwIP在stm32上的无操作系统移植

    LwIP是一个轻型IP协议 xff0c 有无操作系统的支持都可以运行 这里的移植是无操作系统移植 LwIP虽然是一个轻型的IP协议 xff0c 但是TCP IP基本功能都有 而且占用的资源不多 xff0c 非常适合用于嵌入式系统 移植的平台
  • HTML5初体验——蛮神奇的

    记得去年在一个公司实习的时候 xff0c 听当时的领导说起过HTML5 xff0c 当时就大体了解了一下 知道了是新的下一代HTML的新标准 xff0c 去掉了HTML4中的一些标签 xff0c 扩展了一些标签内容 其他的就没有继续深入的去
  • Serilog初识(一)————分别Console、Web程序简单使用Serilog

    Serilog简介 Serilog是 NET应用程序的诊断日志库 它易于设置 xff0c 具有干净的API xff0c 并可在所有最新的 NET平台上运行 虽然它在最简单的应用程序中也很有用 xff0c 但Serilog对结构化日志记录的支
  • intellij idea 开发中,创建Maven项目中的子模块以及相关错误解决

    现在开发 xff0c 很多企业都用Maven来进行项目构建 xff0c 关于Maven的优点 xff0c 本文在此不再赘述 而平时我们学习或者做练习基本用到的都是 单项目 单模块模式 xff0c 即一个Maven项目仅包含一个模块 xff0
  • Windows server 2012 出现大量无名已断开连接用户解决办法

    打开cmd命令窗口 xff0c 执行 taskkill f im winlogon exe t
  • 关于HDFS Balancer的一些小技巧

    关于HDFS Balancer的一些小技巧 前言正文原因分析Balancer工具做均衡带宽设置限定均衡范围参数调优 结语 前言 使用HDFS的过程中 xff0c 难免会出现数据不均衡的情况 xff0c 直观表现就是有的服务器磁盘使用率高的吓
  • 【安全】Goby使用初探

    Goby使用初探 基础配置语言设置npcap安装 使用记录端口扫描 基础配置 语言设置 这里使用的环境是Windows10 64机器 xff0c 下载的方式不再多说 xff0c 直接官网无脑下载即可 xff0c 解压即用 xff0c 不需要
  • 【LDAP】在Centos7环境搭建LDAP服务端

    在Centos7环境搭建LDAP服务端 前言正文OpenLDAP介绍LDIF文件书写规则OpenLDAP部署安装服务配置ldap修改管理员密码初始化配置直接修改配置文件 不建议 使用ldapmodify 建议 添加模式其他配置修改修改服务端
  • 【HDFS】JN回滚大量edit日志导致Namenode主备切换的故障记录

    JN回滚大量edit日志导致Namenode主备切换的故障记录 前言正文问题排查调度服务状态HDFS服务状态 问题分析NameNode日志JN服务器主机指标JN日志 故障恢复 结语过程复盘思考 前言 集群大了 xff0c 这莫名其妙的问题就
  • 【Linux】关于我删文件力度过大导致IO占用太高的解决思路

    关于我删文件力度过大导致IO占用太高的解决思路 前言正文现象描述问题分析处理过程nice命令限制优先级ionice命令限制改造perl脚本 结语 前言 书接上回 xff0c 前两天刚找到删文件性能比较OK的方式后 xff0c 测试没啥问题就
  • ‘docker0‘ already bound to a zone 问题解决

    1 检查firewall cmd中是否存在docker zone 96 firewall cmd get active zones 96 2 如果 docker 区域可用 xff0c 将接口更改为 docker0 xff08 非持久化 xf
  • 【Go】内存模型中的内存可见性

    前言 使用go必然会使用到协程以及其他的并发操作 xff0c 初期学习的时候 xff0c 经常在启动协程时操作变量出现问题 xff0c 要么就是变量没更新 xff0c 要么就是各种崩溃 xff0c 或者vscode报告警之类的 xff0c
  • 【Go】基于telegraf进行自定义插件开发(一)

    基于telegraf进行插件的自定义 xff08 一 xff09 前言正文环境准备目录结构插件结构示例代码注册插件 结语 前言 以长期使用Prometheus和各种exporter的经验来说 xff0c 大量的exporter会占用物理机的
  • 【Go】基于telegraf进行自定义插件开发(二)

    基于telegraf进行自定义插件开发 xff08 二 xff09 前言正文设计开发过程单个服务的处理结构体同时定义了string和数值类型适配本机服务或者多个ip来源 程序打包 结语 前言 书接上会 xff0c 这次记录一下我基于tele
  • 【DataX】数据同步到PG时遇到的分区不存在问题

    数据同步到PG时遇到的分区不存在问题 前言正文问题分析解决方法 结语 前言 大概说下这个问题牵扯出来的背景 xff0c 一个外场项目 xff0c 选型用PG存业务数据 xff0c 然后客户要求保存保留一年的数据 xff0c 运行到现在服务器
  • 【Linux】Sudo的隐晦bug引发的一次业务问题排查

    Sudo的隐晦bug引发的一次业务问题排查 写在前面问题描述问题排查高负载现象排查日志排查跟踪任务调度过程Sudo引发的问题手动复现 问题分析处理方案 写在前面 记录一次生产环境sudo启动进程频繁被Kill且不报错的异常处理过程 xff0

随机推荐

  • 记一次使用SQOOP抽数到Hive遇到的问题

    记一次使用SQOOP抽数到Hive遇到的问题 前置条件 1 源端数据库类型为Mysql 2 目标端是Hive库 xff0c beeline为1 1 0 3 Hive建表时使用了分桶 xff0c 并且加入了stored as orc参数 xf
  • 我的世界光影使用方法

    光影使用方法 写这个主要是为了记录下最近捯饬我的世界服务端和客户端时遇到的一些东西 xff0c 全当随笔了 首先要确认已经安装了高清补丁 xff0c 这次使用的客户端版本是1 12 2 1 下载光影压缩包 xff0c 一般都是zip格式 2
  • 【系统篇 / 配置】❀ 05. 新建管理帐户 ❀ Windows Server 2016

    简介 Windows Server 2016 安装完成后 xff0c 默认的管理帐户是administrator xff0c 拥有绝对权限 xff0c 但是在日常管理中不建议使用这个帐户 xff0c 一旦密码泄露 xff0c 服务器就门洞大
  • 【系统篇 / 域】❀ 04. 组 ❀ Windows Server 2016

    简介 如果能够使用组 xff08 group xff09 来管理用户帐户 xff0c 则必定能够减轻许多网络管理负担 对某个组设置权限后 xff0c 此组内的所有用户都会自动拥有此权限 新建组 可以通过 Active Directory 用
  • Gson源码之TypeAdapterFactory

    TypeAdapterFactory 1 接口类 xff0c 主要是用来创建TypeAdapter对象的2 若Json中的数据结构相同 xff0c 可以进行共享3 其实现类分别是JsonAdapterAnnotationTypeAdapte
  • 如何修改Win10的Windows Terminal的背景(带图文)

    效果图 Windows PowerShell的下载 在Win10上已经带有了新出的Windows Terminal xff08 preview xff09 相对于cmd的界面已经好看了很多 xff0c 但是对着黑乎乎的背景还是容易让人萌发想
  • 普通类和抽象类有哪些区别?

    普通类和抽象类有哪些区别 xff1f 抽象类不能被实例化抽象类可以有抽象方法 xff0c 抽象方法只需申明 xff0c 无需实现含有抽象方法的类必须申明为抽象类抽象的子类必须实现抽象类中所有抽象方法 xff0c 否则这个子类也是抽象类抽象方
  • 美团技术十年:让我们感动的那些人那些事

    时光荏苒 xff0c 美团十岁了 xff0c 美团技术团队也走过了十个春秋 2010年3月4日美团网上线的时候 xff0c 整个公司总共十来人 xff0c 在一套三居室的民房里起步 其中技术团队只有5个人 xff0c 现在有4位还在美团 今
  • linux update kernel

    1 update source step 1 deb https mirrors zju edu cn ubuntu focal main restricted universe multiverse deb https mirrors z
  • sql基础知识left join,right join,inner join区别

    1 left join即以左表为主查出左边表对应的所有数据 lt pre name 61 34 code 34 class 61 34 sql 34 gt select from A left join B on A id 61 B pid
  • 明知 | TypeScript 结合 egg.js 基本使用

    小小又进入了学习状态 xff0c 此时小小由于最近接触了js的相关内容 xff0c 进而接触了一些ts相关的内容 xff0c 所以小小本次主要学习的内容是ts 安装相关依赖 这里安装两个依赖 xff0c 分别为egg和ts 安装ts 这里需
  • 数据库中like的用法

    转自 xff1a http www pinlue com article 2020 03 3100 0310073883813 html
  • Log4j 2使用教程

    转载自 Blog of 天外的星星 xff1a http www cnblogs com leo lsw p log4j2tutorial html Log4j 2的好处就不和大家说了 xff0c 如果你搜了2 xff0c 说明你对他已经有
  • http常见的响应状态码

    HTTP响应状态码分类 1XX xff1a 100 199 信息响应 2XX xff1a 200 299 成功响应 3XX xff1a 300 399 重定向 4XX xff1a 400 499客户端错误 5XX xff1a 500 505
  • vncserver无法启动

    一 问题现象 运行vncserver的时候提示出错 xff0c 查看vnc的日志发现如下错误日志 litin 64 linuxService vnc cat linuxService 4 log Xvnc Free Edition 4 1
  • MongoDB自学笔记12---4.4 更新文档

    4 4 更新文档 Mongodb的增删查都已经学完了 xff0c 只剩下更新了 在mongodb中提供了update 和save 方法用于更新一个文档 xff0c update 是使用最多的 xff0c save 在前面4 1插入文档的时候
  • ffmpeg重要结构体之AVCodec和AVIOContext

    今天继续讲解ffmpeg结构体AvCodec和AVIOContext以便加深对ffmpge的理解 一 AVCodec的讲解 AVCodec结构体是有关codec的结构体 在文件 34 libavcodec avcodec h 34 中 其中
  • xcode6制作framework(使用第三方依赖框架)

    这两天由于会用到framework所以研究了一下framework的制作 xff0c 我用到了xcode6 1 AFNetworing 转载请注明http blog csdn net mengxiangyue 废话不多说了 xff0c 下面
  • OC项目中使用Swift

    OC项目中使用Swift 本文版权归作者所有 xff0c 如需转载请联系孟祥月 CSDN博客 xff1a http blog csdn net mengxiangyue 独立博客 xff1a http mengxiangyue com 最近
  • iOS9-by-Tutorials-学习笔记六:UIStackView-Auto-Layout-Changes

    iOS9 by Tutorials 学习笔记六 xff1a UIStackView Auto Layout Changes 本文版权归作者所有 xff0c 如需转载请联系孟祥月 CSDN博客 xff1a http blog csdn net