# Masonry [![Build Status](https://travis-ci.org/SnapKit/Masonry.svg?branch=master)](https://travis-ci.org/SnapKit/Masonry) [![Coverage Status](https://img.shields.io/coveralls/SnapKit/Masonry.svg?style=flat-square)](https://coveralls.io/r/SnapKit/Masonry) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ![Pod Version](https://img.shields.io/cocoapods/v/Masonry.svg?style=flat)
**Masonry is still actively maintained, we are committed to fixing bugs and merging good quality PRs from the wider community. However if you're using Swift in your project, we recommend using [SnapKit](https://github.com/SnapKit/SnapKit) as it provides better type safety with a simpler API.**
Masonry is a light-weight layout framework which wraps AutoLayout with a nicer syntax. Masonry has its own layout DSL which provides a chainable way of describing your NSLayoutConstraints which results in layout code that is more concise and readable.
Masonry supports iOS and Mac OS X.
For examples take a look at the **Masonry iOS Examples** project in the Masonry workspace. You will need to run `pod install` after downloading.
## What's wrong with NSLayoutConstraints?
Under the hood Auto Layout is a powerful and flexible way of organising and laying out your views. However creating constraints from code is verbose and not very descriptive.
Imagine a simple example in which you want to have a view fill its superview but inset by 10 pixels on every side
```obj-c
UIView *superview = self.view;
UIView *view1 = [[UIView alloc] init];
view1.translatesAutoresizingMaskIntoConstraints = NO;
view1.backgroundColor = [UIColor greenColor];
[superview addSubview:view1];
UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);
[superview addConstraints:@[
//view1 constraints
[NSLayoutConstraint constraintWithItem:view1
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:superview
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:padding.top],
[NSLayoutConstraint constraintWithItem:view1
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:superview
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:padding.left],
[NSLayoutConstraint constraintWithItem:view1
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:superview
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:-padding.bottom],
[NSLayoutConstraint constraintWithItem:view1
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:superview
attribute:NSLayoutAttributeRight
multiplier:1
constant:-padding.right],
]];
```
Even with such a simple example the code needed is quite verbose and quickly becomes unreadable when you have more than 2 or 3 views.
Another option is to use Visual Format Language (VFL), which is a bit less long winded.
However the ASCII type syntax has its own pitfalls and its also a bit harder to animate as `NSLayoutConstraint constraintsWithVisualFormat:` returns an array.
## Prepare to meet your Maker!
Heres the same constraints created using MASConstraintMaker
```obj-c
UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(superview.mas_top).with.offset(padding.top); //with is an optional semantic filler
make.left.equalTo(superview.mas_left).with.offset(padding.left);
make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);
make.right.equalTo(superview.mas_right).with.offset(-padding.right);
}];
```
Or even shorter
```obj-c
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(superview).with.insets(padding);
}];
```
Also note in the first example we had to add the constraints to the superview `[superview addConstraints:...`.
Masonry however will automagically add constraints to the appropriate view.
Masonry will also call `view1.translatesAutoresizingMaskIntoConstraints = NO;` for you.
## Not all things are created equal
> `.equalTo` equivalent to **NSLayoutRelationEqual**
> `.lessThanOrEqualTo` equivalent to **NSLayoutRelationLessThanOrEqual**
> `.greaterThanOrEqualTo` equivalent to **NSLayoutRelationGreaterThanOrEqual**
These three equality constraints accept one argument which can be any of the following:
#### 1. MASViewAttribute
```obj-c
make.centerX.lessThanOrEqualTo(view2.mas_left);
```
MASViewAttribute | NSLayoutAttribute
------------------------- | --------------------------
view.mas_left | NSLayoutAttributeLeft
view.mas_right | NSLayoutAttributeRight
view.mas_top | NSLayoutAttributeTop
view.mas_bottom | NSLayoutAttributeBottom
view.mas_leading | NSLayoutAttributeLeading
view.mas_trailing | NSLayoutAttributeTrailing
view.mas_width | NSLayoutAttributeWidth
view.mas_height | NSLayoutAttributeHeight
view.mas_centerX | NSLayoutAttributeCenterX
view.mas_centerY | NSLayoutAttributeCenterY
view.mas_baseline | NSLayoutAttributeBaseline
#### 2. UIView/NSView
if you want view.left to be greater than or equal to label.left :
```obj-c
//these two constraints are exactly the same
make.left.greaterThanOrEqualTo(label);
make.left.greaterThanOrEqualTo(label.mas_left);
```
#### 3. NSNumber
Auto Layout allows width and height to be set to constant values.
if you want to set view to have a minimum and maximum width you could pass a number to the equality blocks:
```obj-c
//width >= 200 && width <= 400
make.width.greaterThanOrEqualTo(@200);
make.width.lessThanOrEqualTo(@400)
```
However Auto Layout does not allow alignment attributes such as left, right, centerY etc to be set to constant values.
So if you pass a NSNumber for these attributes Masonry will turn these into constraints relative to the view’s superview ie:
```obj-c
//creates view.left = view.superview.left + 10
make.left.lessThanOrEqualTo(@10)
```
Instead of using NSNumber, you can use primitives and structs to build your constraints, like so:
```obj-c
make.top.mas_equalTo(42);
make.height.mas_equalTo(20);
make.size.mas_equalTo(CGSizeMake(50, 100));
make.edges.mas_equalTo(UIEdgeInsetsMake(10, 0, 10, 0));
make.left.mas_equalTo(view).mas_offset(UIEdgeInsetsMake(10, 0, 10, 0));
```
By default, macros which support [autoboxing](https://en.wikipedia.org/wiki/Autoboxing#Autoboxing) are prefixed with `mas_`. Unprefixed versions are available by defining `MAS_SHORTHAND_GLOBALS` before importing Masonry.
#### 4. NSArray
An array of a mixture of any of the previous types
```obj-c
make.height.equalTo(@[view1.mas_height, view2.mas_height]);
make.height.equalTo(@[view1, view2]);
make.left.equalTo(@[view1, @100, view3.right]);
````
## Learn to prioritize
> `.priority` allows you to specify an exact priority
> `.priorityHigh` equivalent to **UILayoutPriorityDefaultHigh**
> `.priorityMedium` is half way between high and low
> `.priorityLow` equivalent to **UILayoutPriorityDefaultLow**
Priorities are can be tacked on to the end of a constraint chain like so:
```obj-c
make.left.greaterThanO
没有合适的资源?快使用搜索试试~ 我知道了~
抖音 iOS Object-C版,抖音demo适配了iphone、ipad
共1137个文件
png:411个
h:341个
m:121个
需积分: 5 0 下载量 134 浏览量
2024-05-12
13:18:46
上传
评论
收藏 7.07MB ZIP 举报
温馨提示
抖音 iOS Object-C版,抖音demo适配了iphone、ipad 同时兼容iOS8.0至iOS12.0系统。当前抖音demo使用Object-C语言编写 结构 本项目共分为三个部分。第一部分为抖音个人主页实现,包含NSOperationQueue多队列解析webp动图、网络资源二级缓存框架搭建。第二部分围绕AVPlayerLayer展开,涉及网络视频边播放边下载、UITableView控制多个视频源播放。第三部分则为WebSocket实现IM即时聊天,其中穿插文本计算、表情编辑等功能。三个部分都涉及网络请求、json数据模型转换以及手势、动画效果处理。 目录 iOS仿抖音app介绍 1.1 引言 1.2 展示图 1.3 结构总览 1.4 iTunes资源获取 1.5 Charles数据采集 1.6 网络请求API接口 1.7 第三方库使用 抖音个人主页 2.1 布局、接口分析 2.2 UICollectionView指定元素固定原理 2.3 UICollectionView指定元素下拉缩放原理 2.4 谷歌libwebp库解析webp图片 2.5
资源推荐
资源详情
资源评论
收起资源包目录
抖音 iOS Object-C版,抖音demo适配了iphone、ipad (1137个子文件)
enc_mips_dsp_r2.c 80KB
vp8l_enc.c 70KB
dec_neon.c 68KB
anim_encode.c 57KB
vp8l_dec.c 57KB
enc_sse2.c 53KB
dec_mips_dsp_r2.c 50KB
dec_sse2.c 46KB
quant_enc.c 45KB
picture_csp_enc.c 42KB
lossless_enc.c 40KB
dec_msa.c 40KB
histogram_enc.c 38KB
lossless_mips_dsp_r2.c 38KB
enc_neon.c 36KB
enc_mips32.c 35KB
backward_references_enc.c 34KB
yuv_sse2.c 33KB
enc_msa.c 32KB
demux.c 31KB
predictor_enc.c 31KB
lossless_enc_sse2.c 30KB
lossless_sse2.c 30KB
idec_dec.c 30KB
webp_dec.c 29KB
backward_references_cost_enc.c 29KB
frame_dec.c 28KB
upsampling_msa.c 28KB
frame_enc.c 28KB
dec_mips32.c 27KB
dec.c 27KB
lossless_neon.c 26KB
enc.c 24KB
lossless.c 24KB
dec_clip_tables.c 23KB
io_dec.c 23KB
tree_dec.c 22KB
tree_enc.c 21KB
muxedit.c 21KB
vp8_dec.c 21KB
filters_mips_dsp_r2.c 21KB
muxread.c 18KB
cost.c 18KB
analysis_enc.c 18KB
alpha_processing.c 18KB
muxinternal.c 18KB
rescaler_msa.c 17KB
lossless_enc_mips32.c 16KB
anim_decode.c 16KB
rescaler_mips_dsp_r2.c 15KB
upsampling_neon.c 15KB
alpha_enc.c 15KB
cost_enc.c 15KB
upsampling_sse2.c 15KB
rescaler_sse2.c 15KB
upsampling.c 15KB
iterator_enc.c 14KB
delta_palettization_enc.c 14KB
alpha_processing_sse2.c 14KB
lossless_enc_mips_dsp_r2.c 14KB
webp_enc.c 14KB
huffman_encode_utils.c 13KB
rescaler_mips32.c 13KB
upsampling_mips_dsp_r2.c 13KB
enc_sse41.c 13KB
lossless_msa.c 13KB
filters_sse2.c 12KB
syntax_enc.c 12KB
filters_neon.c 11KB
yuv_neon.c 11KB
yuv.c 11KB
bit_writer_utils.c 11KB
buffer_dec.c 10KB
thread_utils.c 10KB
utils.c 10KB
picture_rescale_enc.c 10KB
filters.c 9KB
picture_enc.c 9KB
quant_levels_dec_utils.c 9KB
filter_enc.c 9KB
picture_tools_enc.c 8KB
token_enc.c 8KB
picture_psnr_enc.c 8KB
rescaler.c 8KB
yuv_mips_dsp_r2.c 8KB
alpha_processing_mips_dsp_r2.c 8KB
huffman_utils.c 8KB
alpha_dec.c 8KB
cost_mips32.c 7KB
rescaler_neon.c 7KB
cpu.c 7KB
alpha_processing_neon.c 7KB
bit_reader_utils.c 7KB
yuv_mips32.c 6KB
filters_msa.c 6KB
ssim_sse2.c 6KB
lossless_enc_msa.c 6KB
config_enc.c 6KB
ssim.c 5KB
near_lossless_enc.c 5KB
共 1137 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
资源评论
程序媛小y
- 粉丝: 5623
- 资源: 213
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功