控制器
-
(IBAction)buttonClick{}
在对象被销毁时,并不会立马被清空,只有当发现没有别的指针只用该成员属性时IBoutlet内部隐藏的强指针才会释放,对象才会被销毁
只能修饰属性
被IBOutlet修饰的属性
使用格式
@property
(nonatomic, weak) IBOutlet UILabel *label;
一般将一些私有的属性写到类扩展
@interface
类名()/* 属性、成员变量、方法声明 */@end
与分类的区别
@implementation 类名(分类名字)/* 方法实现 */@end```- 分类只能扩充方法- 如果在分类中声明了一个属性,分类只会生成这个属性的get\set方法声明
1.使用tag根据父控件能取出当前内部子控件2.使用tag能判断点击的哪个按钮
-
(UIView *)viewWithTag:(NSInteger)tag;
任何控件都能往自身内部添加子控件subViews
:子控件
superView:父控件
@property
(
nonatomic
)
CGRect frame;@property(nonatomic) CGRect bounds;@property(nonatomic) CGPoint center;struct CGRect { CGPoint origin; CGSize size;};typedef struct CGRect CGRect;
CGRectGetMaxX
(_mainView.frame) : 获取view的x的值+view的宽度的值
CGRectGetMinX
(_mainView.frame) : 获取view的x值
CGAffineTransformMakeTranslation
:每次从零开始形变,每次都是相对于最开始的位置形变
CGAffineTransformTranslate
:从当前位置开始形变,下一次继续
CGAffineTransformRotate
:旋转
CGAffineTransformScale
:缩放, 比例
CGAffineTransformIdentity
:复位
/***********实现移动效果***************/
-
(IBAction)transRotate:(id)sender { [UIView animateWithDuration:2 animations:^{self.header.transform = CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转 }];}- (IBAction)transMove:(id)sender {self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动}- (IBAction)transBig:(id)sender { // 缩放 比例 self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5);}- (IBAction)transSmall:(id)sender { self.header.transform = CGAffineTransformScale(self.header.transform, 0.5, 0.5);}- (IBAction)transform:(id)sender { [UIView animateWithDuration:3 animations:^{ self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动self.header.transform = CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转 self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5); }];}// 复位- (IBAction)goBack:(id)sender { self.header.transform = CGAffineTransformIdentity;}
imageView
.
frame
.
size
= imageView.image.size;
CGRect
tempFrame = imageView.frame;tempFrame.size = imageView.image.size;imageView.frame = tempFrame;
返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…) { 函数体 }
主要作用:1.将一个常用的功能封装起来,方便以后调用2.提高代码重用率
形参:
在定义函数时,函数名后面的小括号()中定义的变量称为形式参数,简称形参,形参一定是变量形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
实参:
在调用函数时传入的值称为实际参数,简称实参,实参可以是常量,变量,表达式
注意点:
1) 返回值可以和返回值类型不一样,系统会对返回值进行自动类型转换(隐式转换)2) 如果函数没有返回值,那么返回值类型就写void3) 函数名称不能相同,形参,返回值类型不同也不行,即不能重载4) c语言不允许函数嵌套5) 函数可以没有返回值类型,默认返回int类型6) 调用函数时传递的实参个数必须和函数的形参个数必须保持一致
return 0:
返回0表示程序正确结束,其他值代表程序非正常结束
argc:
系统传递进来的参数,默认为1
argv:
系统传递进来的参数的实际值,默认是程序的名称
需求
:
要求用户输入一个大于
0
的数
,
如何不大于
0
一值提示
,
知道大于
0
为止
#include
void
scanNumber();int main(int argc, const char * argv[]) { scanNumber(); return 0;}void scanNumber(){ // 接收值 printf("请输入一个大于0的数字:\n"); int number = -1; scanf("%d", &number); // 判断 if (number <= 0) { scanNumber(); }else{printf("m=%d\n", number); } // 递归要有明确的结束条件,防止死循环}
用递归算法求累加和、累乘
#include
int
sum(int a); // 求累加和int mul(int b);// 求累乘int main(){ // 接收值 printf("请输入一个大于0的数字:\n"); int number = -1; scanf("%d", &number); printf("sum = %d\n", sum(number)); printf("mul = %d\n", mul(number)); return 0;}int sum(int a){ int result = 1; if(a == 1){ return result; }else{ return sum(a-1) + a; }}int mul(int b){ int result = 1;if(b == 1){ return result; }else{ return uml(b-1) * b; }}
答:
函数的嵌套是语言特性,递归是逻辑思想;
函数嵌套就是允许函数中调用另一个函数,
递归通过函数嵌套来实现,自己调用自己,
总的来说,函数嵌套就是函数调用函数,递归就是函数调用自己,是函数嵌套的一个特例
写博客第一百一十天;
QQ:565803433
- (IBAction)buttonClick
{
}
在对象被销毁时,并不会立马被清空,只有当发现没有别的指针只用该成员属性时IBoutlet内部隐藏的强指针才会释放,对象才会被销毁
只能修饰属性
被IBOutlet修饰的属性
使用格式
@property (nonatomic, weak) IBOutlet UILabel *label;
一般将一些私有的属性写到类扩展
@interface 类名()
/* 属性、成员变量、方法声明 */
@end
与分类的区别
@implementation 类名(分类名字)
/* 方法实现 */
@end
```
- 分类只能扩充方法
- 如果在分类中声明了一个属性,分类只会生成这个属性的get\set方法声明
1.使用tag根据父控件能取出当前内部子控件
2.使用tag能判断点击的哪个按钮
- (UIView *)viewWithTag:(NSInteger)tag;
任何控件都能往自身内部添加子控件
subViews:子控件
superView:父控件
@property(nonatomic) CGRect frame;
@property(nonatomic) CGRect bounds;
@property(nonatomic) CGPoint center;
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
CGRectGetMaxX(_mainView.frame) : 获取view的x的值+view的宽度的值
CGRectGetMinX(_mainView.frame) : 获取view的x值
CGAffineTransformMakeTranslation
:每次从零开始形变,每次都是相对于最开始的位置形变 CGAffineTransformTranslate
:从当前位置开始形变,下一次继续
CGAffineTransformRotate
:旋转
CGAffineTransformScale
:缩放, 比例
CGAffineTransformIdentity
:复位
/***********实现移动效果***************/
- (IBAction)transRotate:(id)sender {
[UIView animateWithDuration:2 animations:^{
self.header.transform = CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转
}];
}
- (IBAction)transMove:(id)sender {
self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动
}
- (IBAction)transBig:(id)sender {
// 缩放 比例
self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5);
}
- (IBAction)transSmall:(id)sender {
self.header.transform = CGAffineTransformScale(self.header.transform, 0.5, 0.5);
}
- (IBAction)transform:(id)sender {
[UIView animateWithDuration:3 animations:^{
self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动
self.header.transform = CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转
self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5);
}];
}
// 复位
- (IBAction)goBack:(id)sender {
self.header.transform = CGAffineTransformIdentity;
}
imageView.frame.size = imageView.image.size;
CGRect tempFrame = imageView.frame;
tempFrame.size = imageView.image.size;
imageView.frame = tempFrame;
- (IBAction)buttonClick
{
}
在对象被销毁时,并不会立马被清空,只有当发现没有别的指针只用该成员属性时IBoutlet内部隐藏的强指针才会释放,对象才会被销毁
只能修饰属性
被IBOutlet修饰的属性
使用格式
@property (nonatomic, weak) IBOutlet UILabel *label;
一般将一些私有的属性写到类扩展
@interface 类名()
/* 属性、成员变量、方法声明 */
@end
与分类的区别
@implementation 类名(分类名字)
/* 方法实现 */
@end
```
- 分类只能扩充方法
- 如果在分类中声明了一个属性,分类只会生成这个属性的get\set方法声明
1.使用tag根据父控件能取出当前内部子控件
2.使用tag能判断点击的哪个按钮
- (UIView *)viewWithTag:(NSInteger)tag;
任何控件都能往自身内部添加子控件
subViews:子控件
superView:父控件
@property(nonatomic) CGRect frame;
@property(nonatomic) CGRect bounds;
@property(nonatomic) CGPoint center;
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
CGRectGetMaxX(_mainView.frame) : 获取view的x的值+view的宽度的值
CGRectGetMinX(_mainView.frame) : 获取view的x值
CGAffineTransformMakeTranslation
:每次从零开始形变,每次都是相对于最开始的位置形变 CGAffineTransformTranslate
:从当前位置开始形变,下一次继续
CGAffineTransformRotate
:旋转
CGAffineTransformScale
:缩放, 比例
CGAffineTransformIdentity
:复位
/***********实现移动效果***************/
- (IBAction)transRotate:(id)sender {
[UIView animateWithDuration:2 animations:^{
self.header.transform = CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转
}];
}
- (IBAction)transMove:(id)sender {
self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动
}
- (IBAction)transBig:(id)sender {
// 缩放 比例
self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5);
}
- (IBAction)transSmall:(id)sender {
self.header.transform = CGAffineTransformScale(self.header.transform, 0.5, 0.5);
}
- (IBAction)transform:(id)sender {
[UIView animateWithDuration:3 animations:^{
self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动
self.header.transform = CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转
self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5);
}];
}
// 复位
- (IBAction)goBack:(id)sender {
self.header.transform = CGAffineTransformIdentity;
}
imageView.frame.size = imageView.image.size;
CGRect tempFrame = imageView.frame;
tempFrame.size = imageView.image.size;
imageView.frame = tempFrame;