一、控件的屬性
1.CGRect frame
1> 表示控件的位置和尺寸(以父控件的左上角為坐標原點(0, 0))
2> 修改這個屬性,可以調整控件的位置和尺寸
2.CGPoint center
1> 表示控件的中點(以父控件的左上角為坐標原點)
2> 修改這個屬性,可以調整控件的位置
3.CGRect bounds
1> 表示控件的位置和尺寸(以自己的左上角位坐標原點,位置永遠是(0, 0))
2> 修改這個屬性,只能調整控件的尺寸
4.int tag
1> 表示控件的標識
2> 通過不同標識可以區分不同的控件
5.CGAffineTransform transform
1> 表示控件的形變狀態(旋轉角度、縮放比例)
2> 創建CGAffineTransform的函數
`* CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
創建一個x、y方向的縮放比例分別為sx、sy的形變值
* CGAffineTransformMakeRotation(CGFloat angle)
創建一個旋轉角度為angle的形變值
* CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)
在形變值t的基礎上,再進行縮放,x、y方向的縮放比例分別為sx、sy,然后返回一個新的形變值
* CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)
在形變值t的基礎上,再進行旋轉,旋轉角度為angle,然后返回一個新的形變值
二、添加控件到控制器的view
[self.view addSubview:子控件];`
二、添加控件到控制器的view
?如: [self.view addSubview:子控件];
2.1.設置按鈕的屬性
```
// 1.創建按鈕
// 1.1.創建
UIButton *btn = [[UIButton alloc] init];
// 1.2.設置按鈕的尺寸和位置
btn.frame = CGRectMake(0, 0, 100, 100);
// 1.3.設置按鈕普通狀態下的屬性
// 1.3.1.設置背景圖片
UIImage *normal = [UIImage imageNamed:@"btn_01.png"];
[btn setBackgroundImage:normal forState:UIControlStateNormal];
// 1.3.2.設置文字
[btn setTitle:@"你好" forState:UIControlStateNormal];
// 1.3.3.設置文字顏色
[btn setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
// 1.4.設置按鈕高亮狀態下的屬性
// 1.4.1.設置背景圖片
UIImage *high = [UIImage imageNamed:@"btn_02.png"];
[btn setBackgroundImage:high forState:UIControlStateHighlighted];
// 1.4.2.設置文字
[btn setTitle:@"Hello" forState:UIControlStateHighlighted];
// 1.4.3.設置文字顏色
[btn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
// 1.5.監聽按鈕點擊
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
```
四、viewDidLoad
1.這是控制器的一個方法
2.當控制器的view創建完畢的時候會調用一次
五、UISlider
1.value屬性可以獲得當前的進度值
2.按鈕的value發生改變了,會觸發UIControlEventValueChanged事件
六、Plist文件的使用
1.加載一個plist文件的時候,會返回一個plist的根節點對象(Root)
七、NSBundle的使用
1.利用NSBundle可以訪問某個資源包的內容
2.如果訪問軟件中最主要資源包的內容,應該用mainBundle
```
NSBundle *bundle = [NSBundle mainBundle];
```
3.利用NSBundle獲得文件的全路徑
```
NSString *path = [bundle pathForResource:@"descs" ofType:@"plist"];
```
七、實例> 按鈕操作(移動/放大/旋轉)
```
ViewController.h
#import@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *btn;
// 重置
- (IBAction)reset:(id)sender;
// 行走
- (IBAction)run:(id)sender;
// 縮放
- (IBAction)scale:(id)sender;
// 旋轉
- (IBAction)rotate:(id)sender;
@end
```
```
#import "ViewController.h"
#define kDelta 50
//const int delta = 50;
@interface ViewController ()
//{
//? ? CGFloat _angle;
//}
@end
@implementation ViewController
//- (void)begin
//{
//? ? // 0.動畫(頭部-開始動畫)
//? ? [UIView beginAnimations:nil context:nil];
//? ? // 設置動畫的執行時間
//? ? [UIView setAnimationDuration:1.0];
//}
//
//- (void)end
//{
//? ? // 4.動畫(尾部-提交動畫-執行動畫)
//? ? [UIView commitAnimations];
//}
- (void)btnClickWithBlock:(void (^)())block
{
// 0.動畫(頭部-開始動畫)
[UIView beginAnimations:nil context:nil];
// 設置動畫的執行時間
[UIView setAnimationDuration:1.0];
block();
// 1.動畫(尾部-提交動畫-執行動畫)
[UIView commitAnimations];
}
#pragma mark 控制按鈕走動(上下左右)
- (IBAction)run:(id)sender {
[self btnClickWithBlock:^{
// 1.先取出frame
//? ? ? ? CGRect tempFrame = _btn.frame;
CGPoint tempCenter = _btn.center;
// 2.取出按鈕的tag標記
int tag = [sender tag];
// CGFloat delta = 100;
switch (tag) {
case 1: // 上
//? ? ? ? ? ? ? ? tempFrame.origin.y -= kDelta;
tempCenter.y -= kDelta;
break;
case 2: // 右
//? ? ? ? ? ? ? ? tempFrame.origin.x += kDelta;
tempCenter.x += kDelta;
break;
case 3: // 下
//? ? ? ? ? ? ? ? tempFrame.origin.y += kDelta;
tempCenter.y += kDelta;
break;
case 4: // 左
//? ? ? ? ? ? ? ? tempFrame.origin.x -= kDelta;
tempCenter.x -= kDelta;
break;
default:
break;
}
// 3.重新賦值按鈕的frame
//? ? ? ? _btn.frame = tempFrame;
_btn.center = tempCenter;
}];
}
#pragma mark 放大\縮小
- (IBAction)scale:(id)sender {
[self btnClickWithBlock:^{
CGFloat scale = [sender tag] == 20 ? 1.2 : 0.8;
_btn.transform = CGAffineTransformScale(_btn.transform, scale, scale);
}];
}
#pragma mark 左旋轉\右旋轉
- (IBAction)rotate:(id)sender {
//? ? _angle -= M_PI_4;
// 弧度 3.14 - π
// 角度 180
// 向左旋轉45°
//? ? _btn.transform = CGAffineTransformMakeRotation(- M_PI_4);
//? ? _btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_4 * (10 == tag?-1:1));
[self btnClickWithBlock:^{
int tag = [sender tag];
if (10 == tag) { // 左
_btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_4 * -1);
} else { // 右
_btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_4 * 1);
}
}];
}
#pragma mark 重置
- (IBAction)reset:(id)sender {
// 清空之前所有的形變狀態(消除以前的旋轉、縮放等狀態)
//? ? _btn.transform = CGAffineTransformIdentity;
[self btnClickWithBlock:^{
_btn.transform = CGAffineTransformIdentity;
}];
}
@end
```
八、實例> 簡易圖片瀏覽器
```
#import@interface ViewController : UIViewController
- (IBAction)nightMode:(UISwitch *)sender;
- (IBAction)imageSizeChange:(UISlider *)sender;
- (IBAction)setting;
- (IBAction)sliderValueChange:(UISlider *)sender;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UILabel *imageNo;
@property (weak, nonatomic) IBOutlet UILabel *imageDesc;
@property (weak, nonatomic) IBOutlet UIView *settingView;
@end
```
```
#import "ViewController.h"
@interface ViewController ()
{
NSArray *_allDescs;
}
@end
@implementation ViewController
#pragma mark 控制器的view加載完畢后會調用一次
- (void)viewDidLoad
{
[super viewDidLoad];
// 1.獲得所有的描述(通過解析plist文件來創建數組對象,比如傳入文件的全路徑)
// 如果要訪問項目中資源包里面的所有資源。應該用mainBundle
NSBundle *bundle = [NSBundle mainBundle];
// 獲得文件的全路徑
NSString *path = [bundle pathForResource:@"descs" ofType:@"plist"];
// 加載path對應的文件來創建數組
_allDescs = [NSArray arrayWithContentsOfFile:path];
// 2.設置默認的描述
_imageDesc.text = _allDescs[0];
}
#pragma mark 夜間模式
- (IBAction)nightMode:(UISwitch *)sender {
if (sender.on) { // 開
self.view.backgroundColor = [UIColor darkGrayColor];
} else { // 關
self.view.backgroundColor = [UIColor whiteColor];
}
}
#pragma mark 圖片尺寸改變了
- (IBAction)imageSizeChange:(UISlider *)sender {
//? ? // 1.取出frame
//? ? CGRect tempFrame = _imageView.frame;
//
//? ? // 2.修改frame
//? ? tempFrame.size.width = sender.value * 320;
//? ? tempFrame.size.height = sender.value * 100;
//
//? ? // 3.重新賦值frame
//? ? _imageView.frame = tempFrame;
_imageView.transform = CGAffineTransformMakeScale(sender.value, sender.value);
}
#pragma mark 點擊了設置
- (IBAction)setting {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
// 1.取出中點
CGPoint tempCenter = _settingView.center;
// 2.修改y值
//? ? tempCenter.y -= _settingView.frame.size.height;
if (_settingView.frame.origin.y == self.view.frame.size.height) { // 設置界面目前看不見
tempCenter.y -= _settingView.bounds.size.height;
} else { // 能看見設置界面
tempCenter.y += _settingView.bounds.size.height;
}
// 3.重新賦值
_settingView.center = tempCenter;
[UIView commitAnimations];
}
#pragma mark slider值改變
- (IBAction)sliderValueChange:(UISlider *)sender {
// 1.設置中間的圖片
// 獲得圖片名稱? %.f 不保留任何小數
NSString *imageName = [NSString stringWithFormat:@"%.f.png", sender.value];
_imageView.image = [UIImage imageNamed:imageName];
// 2.設置序號(第幾張)
_imageNo.text = [NSString stringWithFormat:@"%.f/16", sender.value + 1];
// 3.設置描述
int no = (int)(sender.value + 0.5);
_imageDesc.text = _allDescs[no];
}
@end
```
如果還有什么不太明白,歡迎留言。2016第一篇blog,謝謝大家!
作者: 清澈Saup
出處: http://qingche/
本文版權歸作者和簡書共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。