1⃣️
__VA_ARGS__
在GNU C中 红可以接受可变数目的参数 就像函数一样
可以把
__VA_ARGS__看成是将赋值给该宏
//
注意这里不能在函数中调用abc()
#include <stdio.h>
#include <stdarg.h>
#define ABC(...) printf(__VA_ARGS__)
/* void abc(...)
{
//printf(__VA_ARGS__);
} */
int main()
{
ABC( " %s\n ", " hello ");
return 0;
}
#include <stdio.h>
#include <stdarg.h>
#define ABC(...) printf(__VA_ARGS__)
/* void abc(...)
{
//printf(__VA_ARGS__);
} */
int main()
{
ABC( " %s\n ", " hello ");
return 0;
}
宏是可以接受可变参数 而不是用函数(函数中涉及的可变数目参数问题需要用到va_list)
另外 是一个可变参数的宏 这个宏是在新的C99规范中新增的 目前似乎只有gcc支持(VC6.0的编译器不支持) 宏前面加上##的作用在于 当这个可变参数的个数为0时,这里的##起到把前面多余的””去掉的作用力 否则会编译出错
2⃣️
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__宏在预编译时会替换成当前的行号
4) __FUNCTION__宏在预编译时会替换成当前的函数名称
3⃣️
当要背景颜色透明的时候,alpha导致subview也透明了解决方法
(相当于改变uicolor的透明属性)
1.xib中的background color 选others 里面有个opacity
2.代码:backgroundColor = [uicolor colorwithRed:xx green:xx blue:xx alpha:xx];
4⃣️
size_t在32位系统中是四字节的,在64位系统中是8字节 可以使用这个类型增加程序的移植性
size_t一般用来表示一种计数,比如有多少东西被拷贝等。例如:sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小。 它的意义大致是“适于计量内存中可容纳的数据项目个数的无符号整数类型”。所以,它在数组下标和内存管理函数之类的地方广泛使用。
5⃣️
opaque透明
6⃣️
MBProgressHUD中定义的MBProgressHUDMode枚举,
它用来表示HUD窗口的模式
typedef
enum
{
// 使用UIActivityIndicatorView来显示进度,这是默认值
MBProgressHUDModeIndeterminate
,
// 使用一个圆形饼图来作为进度视图
MBProgressHUDModeDeterminate
,
// 使用一个水平进度条
MBProgressHUDModeDeterminateHorizontalBar
,
// 使用圆环作为进度条
MBProgressHUDModeAnnularDeterminate
,
// 显示一个自定义视图,通过这种方式,可以显示一个正确或错误的提示图
MBProgressHUDModeCustomView
,
// 只显示文本
MBProgressHUDModeText
}
MBProgressHUDMode
;
一个MBProgressHUD视图主要由四个部分组成:
loading动画视图
标题文本框(label)
详情文本框(detailsLabel)
HUD背景框
// 背景框的透明度,默认值是0.8
@property (assign) float opacity;
// 背景框的颜色
// 需要注意的是如果设置了这个属性,则opacity属性会失效,即不会有半透明效果
@property (MB_STRONG) UIColor *color;
// 背景框的圆角半径。默认值是10.0
@property (assign) float cornerRadius;
// 标题文本的字体及颜色
@property (MB_STRONG) UIFont* labelFont;
@property (MB_STRONG) UIColor* labelColor;
// 详情文本的字体及颜色
@property (MB_STRONG) UIFont* detailsLabelFont;
@property (MB_STRONG) UIColor* detailsLabelColor;
// 菊花的颜色,默认是白色
@property (MB_STRONG) UIColor *activityIndicatorColor;
dimBackground,用于为HUD窗口的视图区域覆盖上一层径向渐变(radial gradient)层,其定义如下:
@property (assign) BOOL dimBackground;
MBProgressHUD提供了几个属性,可以让我们控制HUD的布局,这些属性主要有以下几个:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// HUD相对于父视图中心点的x轴偏移量和y轴偏移量
@property (assign) float xOffset;
@property (assign) float yOffset;
// HUD各元素与HUD边缘的间距
@property (assign) float margin;
// HUD背景框的最小大小
@property (assign) CGSize minSize;
// HUD的实际大小
@property (atomic, assign, readonly) CGSize size;
// 是否强制HUD背景框宽高相等
@property (assign, getter = isSquare) BOOL square;
|
需要注意的是,MBProgressHUD视图会充满其父视图的frame内,为此,在MBProgressHUD的layoutSubviews方法中,还专门做了处理,如下代码所示:
1
2
3
4
5
6
7
8
9
10
11
|
- (void)layoutSubviews {
[
super
layoutSubviews];
// Entirely cover the parent view
UIView *parent = self.superview;
if
(parent) {
self.frame = parent.bounds;
}
...
}
|
7⃣️
UIActivityIndicatorView
1.初始化的时候不需要设置尺寸 设置尺寸也没有效果
2.必须调用startAnimating才会显示
UIActivityIndicatorView
// 初始化指示器
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
// 设置指示器位置
indicator.center = CGPointMake(self.view.frame.size.width * 0.5, self.view.frame.size.height * 0.5);
// 开启动画,必须调用,否则无法显示
[indicator startAnimating];
[self.view addSubview:indicator];
8⃣️
__nullable和__nonnull。从字面上我们可以猜到,__nullable表示对象可以是NULL或nil,而__nonnull表示对象不应该为空。
9⃣️
简单点说就是automaticallyAdjustsScrollViewInsets根据按所在界面的status bar,navigationbar,与tabbar的高度,自动调整scrollview的 inset,设置为no,不让viewController调整。
self
.
automaticallyAdjustsScrollViewInsets
=
NO
;
//
这个方法目的
:
根据所在界面的
bar navigationbar
与
tabbar
的高度,自动调整
scrollView
的
inset
,设置为
no
,不让
viewController
调整
问题在于
:
自定义了一个
navigationbar
,因系统自动判断并适配,改为
no
才能实现相应的效果