日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

IOS开发学习笔记018- 一般控件的使用

發布時間:2025/4/16 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS开发学习笔记018- 一般控件的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1、移動

2、動畫

3、縮放

3、旋轉

4、簡化代碼

5、總結

?

UIButton 的兩種狀態

normal

highlighted?

?1、移動

OC語法規定:不允許直接修改某個對象中結構體屬性的成員。

1 // 獲取image控件的frame 2 CGRect rect = self.btnImage.frame; 3 //self.btnImage.frame.origin.y = 20; // 不能直接修改 4 // 更改Y的值,減小,如果減小到5則一直位5 5 rect.origin.y -= 5; 6 if( 5 >= rect.origin.y) 7 { 8 rect.origin.y = 5; 9 } 10 // 重新賦值 11 self.btnImage.frame = rect;

?

2、動畫

這樣看起來按鈕移動的比較生硬,所以這里給他的移動添加上動畫。用到UIView的動畫屬性

1 // 0、動畫 (頭部-開始動畫) 2 [UIView beginAnimations:nil context:nil]; 3 // 1、獲取image控件的frame 4 CGRect rect = self.btnImage.frame; 5 //self.btnImage.frame.origin.y = 20; // 不能直接修改 6 // 2、更改Y的值,減小,如果減小到5則一直位5 7 rect.origin.y -= 5; 8 if( 5 >= rect.origin.y) 9 { 10 rect.origin.y = 5; 11 } 12 // 3、重新賦值 13 self.btnImage.frame = rect; 14 // 4、動畫(尾部-提交動畫-執行動畫) 15 [UIView commitAnimations];

?

在設置過動畫開始后再加上動畫執行時間

// 設置動畫的執行時間[UIView setAnimationDuration:0.6];

?

可以看到按鈕在平緩移動。

下面是關于動畫的一些類方法

1 @interface UIView(UIViewAnimation) 2 3 + (void)beginAnimations:(NSString *)animationID context:(void *)context; // additional context info passed to will start/did stop selectors. begin/commit can be nested 4 + (void)commitAnimations; // starts up any animations when the top level animation is commited 5 6 // no getters. if called outside animation block, these setters have no effect. 7 + (void)setAnimationDelegate:(id)delegate; // default = nil 8 + (void)setAnimationWillStartSelector:(SEL)selector; // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context 9 + (void)setAnimationDidStopSelector:(SEL)selector; // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 10 + (void)setAnimationDuration:(NSTimeInterval)duration; // default = 0.2 11 + (void)setAnimationDelay:(NSTimeInterval)delay; // default = 0.0 12 + (void)setAnimationStartDate:(NSDate *)startDate; // default = now ([NSDate date]) 13 + (void)setAnimationCurve:(UIViewAnimationCurve)curve; // default = UIViewAnimationCurveEaseInOut 14 + (void)setAnimationRepeatCount:(float)repeatCount; // default = 0.0. May be fractional 15 + (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses; // default = NO. used if repeat count is non-zero 16 + (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState; // default = NO. If YES, the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default). 17 18 + (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache; // current limitation - only one per begin/commit block 19 20 + (void)setAnimationsEnabled:(BOOL)enabled; // ignore any attribute changes while set. 21 + (BOOL)areAnimationsEnabled; 22 + (void)performWithoutAnimation:(void (^)(void))actionsWithoutAnimation NS_AVAILABLE_IOS(7_0); 23 24 @end

?

下面說一些常用的吧:
beginAnimations 開始動畫
commitAnimations 執行動畫 setAnimationDelegate 設置動畫委托
setAnimationDuration 設置動畫時間 setAnimationDelay 設置動畫延遲時間 setAnimationStartDate 設置動畫開始日期 setAnimationCurve 設置動畫曲線 setAnimationRepeatCount 設置動畫重復次數 setAnimationsEnabled 關閉動畫 areAnimationsEnabled 動畫是否開啟 3、旋轉

下面來看按鈕的旋轉方法 transform屬性
旋轉方式有兩種:
  一種改變弧度 π
  一種改變角度 90
1 - (IBAction)RotateLeft 2 { 3 // 0、動畫頭部 4 [UIView beginAnimations:nil context:nil]; 5 // 設置動畫時間 6 [UIView setAnimationDuration:0.5]; 7 // 1、獲取當前的按鈕的transform 8 //_btnImage.transform = CGAffineTransformMakeRotation(-M_PI_4); // 每次都是-45度,所以再次點擊沒有旋轉 9 10 _btnImage.transform = CGAffineTransformRotate(_btnImage.transform, -M_PI_4); // 返回新的transform對象,可以連續旋轉角度 11 // 7、動畫(尾部-提交動畫-執行動畫) 12 [UIView commitAnimations]; 13 }

?

4、縮放

可以改變frame屬性改變大小

1 // 0、動畫 (頭部-開始動畫) 2 [UIView beginAnimations:nil context:nil]; 3 // 設置動畫的執行時間 4 [UIView setAnimationDuration:0.6]; 5 // 1、獲取image控件的frame 6 CGRect rect = self.btnImage.frame; 7 // 2、獲取btn控件的中心 8 CGPoint point = self.btnImage.center; 9 //self.btnImage.frame.origin.y = 20; // 不能直接修改 10 // 3、更改高度和寬度 11 rect.size.width *= 1.1; 12 rect.size.height *= 1.1; 13 // 4、計算新的原點,,保證放大后按鈕的中心位置不變 14 point.x -= rect.size.width/2; 15 point.y -= rect.size.height/2; 16 // 5、將新的原點賦值, 17 rect.origin = point; 18 19 // 6、重新賦值 20 self.btnImage.frame = rect; 21 //self.btnImage.center = point; 22 // 7、動畫(尾部-提交動畫-執行動畫) 23 [UIView commitAnimations];

?




也可以改變transform屬性改變大小,可以想像
CGAffineTransformScale內部實現就是方法1 1 // 方法2 直接修改transform屬性 2 // 0、動畫 (頭部-開始動畫) 3 [UIView beginAnimations:nil context:nil]; 4 // 設置動畫的執行時間 5 [UIView setAnimationDuration:0.6]; 6 //_btnImage.transform = CGAffineTransformMakeScale(1.2, 1.2); // 只會改變一次 7 _btnImage.transform = CGAffineTransformScale(_btnImage.transform, 1.1, 1.1); // 返回修改的transform屬性,可連續修改 8 // 動畫(尾部-提交動畫-執行動畫) 9 [UIView commitAnimations];

?

5、簡化代碼
將上面代碼整理后是這樣
1 // id 類型的不能用點語法 2 - (IBAction)Run:(id)sender 3 { 4 // 0、動畫 (頭部-開始動畫) 5 [UIView beginAnimations:nil context:nil]; 6 // 設置動畫的執行時間 7 [UIView setAnimationDuration:0.6]; 8 // 1、獲取image控件的frame 9 CGRect rect = self.btnImage.frame; 10 //self.btnImage.frame.origin.y = 20; // 不能直接修改 11 switch ([sender tag] ) 12 { 13 case 1: 14 // 2、更改Y的值 15 rect.origin.y -= DELTA; 16 break; 17 case 2: 18 // 2、更改Y的值 19 rect.origin.y += DELTA; 20 21 break; 22 case 3: 23 // 2、更改x的值 24 rect.origin.x -= DELTA; 25 break; 26 case 4: 27 // 2、更改x的值 28 rect.origin.x += DELTA; 29 break; 30 default: 31 break; 32 } 33 // 3、重新賦值 34 self.btnImage.frame = rect; 35 // 4、動畫(尾部-提交動畫-執行動畫) 36 [UIView commitAnimations]; 37 } 38 39 - (IBAction)Scale:(id)sender 40 { 41 // 方法2 直接修改transform屬性 42 // 0、動畫 (頭部-開始動畫) 43 [UIView beginAnimations:nil context:nil]; 44 // 設置動畫的執行時間 45 [UIView setAnimationDuration:0.6]; 46 //_btnImage.transform = CGAffineTransformMakeScale(1.2, 1.2); // 只會改變一次 47 float scale = ([sender tag] == 5) ? 1.1 : 0.9; 48 _btnImage.transform = CGAffineTransformScale(_btnImage.transform, scale, scale); // 返回修改的transform屬性,可連續修改 49 // 動畫(尾部-提交動畫-執行動畫) 50 [UIView commitAnimations]; 51 52 } 53 54 - (IBAction)Rotate:(id)sender 55 { 56 // 0、動畫頭部 57 [UIView beginAnimations:nil context:nil]; 58 // 設置動畫時間 59 [UIView setAnimationDuration:0.5]; 60 // 1、獲取當前的按鈕的transform 61 //_btnImage.transform = CGAffineTransformMakeRotation(-M_PI_4); // 每次都是-45度,所以再次點擊沒有旋轉 62 float rotate = ([sender tag] == 7) ? -M_PI_4 : M_PI_4; 63 _btnImage.transform = CGAffineTransformRotate(_btnImage.transform, rotate); 64 // 7、動畫(尾部-提交動畫-執行動畫) 65 [UIView commitAnimations]; 66 }
仔細觀察代碼可以發現這三個函數的頭部好尾部好多重復代碼,
如果代碼中又很多函數的頭部和尾部都有很多重復代碼,可以使用block簡化代碼

先看一下怎么寫得
1 - (void)btnClickWithBlock:(void(^)())myBlock 2 { 3 // 動畫 (頭部-開始動畫) 4 [UIView beginAnimations:nil context:nil]; 5 // 設置動畫的執行時間 6 [UIView setAnimationDuration:0.6]; 7 8 myBlock(); 9 10 // 動畫(尾部-提交動畫-執行動畫) 11 [UIView commitAnimations]; 12 }

?

這樣寫后,后面直接調用這個方法就可以了
1 - (void)btnClickWithBlock:(void(^)())myBlock 2 { 3 // 動畫 (頭部-開始動畫) 4 [UIView beginAnimations:nil context:nil]; 5 // 設置動畫的執行時間 6 [UIView setAnimationDuration:0.6]; 7 8 myBlock(); 9 10 // 動畫(尾部-提交動畫-執行動畫) 11 [UIView commitAnimations]; 12 } 13 14 // id 類型的不能用點語法 15 - (IBAction)Run:(id)sender 16 { 17 18 [self btnClickWithBlock:^{ 19 // 1、獲取image控件的frame 20 CGRect rect = self.btnImage.frame; 21 //self.btnImage.frame.origin.y = 20; // 不能直接修改 22 switch ([sender tag] ) 23 { 24 case 1: 25 // 2、更改Y的值 26 rect.origin.y -= DELTA; 27 break; 28 case 2: 29 // 2、更改Y的值 30 rect.origin.y += DELTA; 31 32 break; 33 case 3: 34 // 2、更改x的值 35 rect.origin.x -= DELTA; 36 break; 37 case 4: 38 // 2、更改x的值 39 rect.origin.x += DELTA; 40 break; 41 default: 42 break; 43 } 44 // 3、重新賦值 45 self.btnImage.frame = rect; 46 47 }]; 48 49 50 } 51 52 - (IBAction)Scale:(id)sender 53 { 54 [self btnClickWithBlock:^{ 55 //_btnImage.transform = CGAffineTransformMakeScale(1.2, 1.2); // 只會改變一次 56 float scale = ([sender tag] == 5) ? 1.1 : 0.9; 57 _btnImage.transform = CGAffineTransformScale(_btnImage.transform, scale, scale); // 返回修改的transform屬性,可連續修改 58 59 }]; 60 } 61 62 - (IBAction)Rotate:(id)sender 63 { 64 [self btnClickWithBlock:^{ 65 66 // 1、獲取當前的按鈕的transform 67 //_btnImage.transform = CGAffineTransformMakeRotation(-M_PI_4); // 每次都是-45度,所以再次點擊沒有旋轉 68 float rotate = ([sender tag] == 7) ? -M_PI_4 : M_PI_4; 69 _btnImage.transform = CGAffineTransformRotate(_btnImage.transform, rotate); 70 71 }]; 72 }

?


這樣看來代碼簡潔了很多。

6、恢復形變屬性為原狀
CGAffineTransformIdentity 這個Const常量就可以直接恢復原狀 1 - (IBAction)reset:(id)sender 2 { 3 // 恢復所有的形變屬性,transform的改變全部恢復 4 [self btnClickWithBlock:^{ 5 _btnImage.transform = CGAffineTransformIdentity; 6 }]; 7 }

?

?

?

總結
以上這些屬性全部繼承自UIView,所以對其他控件也適用。
1、frame 表示控件的位置和尺寸,以父控件左上角位坐標原點
2、center 表示控件的中心,
,以父控件左上角位坐標原點
3、bounds 表示控件的位置和尺寸,以自己左上角位坐標原點,永遠是(0,0)
4、transform 表示控件形狀屬性,縮放,旋轉等
5、tag 表示控件的標識,默認是0

?

?

?2015-04-25 今日如此,明日依舊。

?

轉載于:https://www.cnblogs.com/songliquan/p/4455809.html

總結

以上是生活随笔為你收集整理的IOS开发学习笔记018- 一般控件的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: free性欧美hd精品4k | 国产精品久久一区二区三区 | 国产理论在线 | 青青草免费在线观看 | 在线欧美日韩 | www.555国产精品免费 | 日韩亚洲欧美一区二区三区 | 射在线| 91亚洲精 | 国产亚洲第一页 | 色哟哟一区二区 | 在线成人免费电影 | 涩涩涩999| 麻豆chinese新婚xxx| 国产伦精品一区二区三区视频网站 | av先锋在线 | 欧美精产国品一二三区 | 国产高清视频在线播放 | 妺妺窝人体色www在线小说 | 麻豆精品国产传媒av绿帽社 | 成人看的毛片 | 五月激情在线观看 | 久久激情综合网 | 情涩快播 | 成熟了的熟妇毛茸茸 | 亚洲一区a| 春闺艳妇(h)高h产乳 | 亚洲国产精品免费视频 | 亚洲综合五月天婷婷丁香 | 一级视频在线观看 | 欧洲精品一区二区 | 国产精品资源站 | 人妻巨大乳一二三区 | 国产精品爽爽久久久久久 | 深夜福利免费在线观看 | 欧美三级影院 | 中文字幕在线观看播放 | 欧美精品h | 日本三级视频网站 | 欧美sm凌虐视频网站 | 色偷偷噜噜噜亚洲男人 | 欧美高潮视频 | www.色午夜| 中文字幕一区二区三区免费视频 | 妇女一级片 | 国产ts在线播放 | 毛片a级片 | 黄色录像三级 | 日韩伦人妻无码 | 草莓视频18免费观看 | 天堂岛av | 久久久午夜精品 | 国产精品久久久久久久久久久久久久久久久久 | 亚洲一区二区黄 | www.久久精品视频 | 天天综合天天添夜夜添狠狠添 | 91精品中文字幕 | www,五月天,com | va在线视频 | 国产乱码久久久久久 | 秋霞在线视频观看 | 日韩社区 | 丰满熟妇被猛烈进入高清片 | 欧美激精品| 黄色网址在线免费 | 精品人妻一区二区三区四区在线 | 69xxx国产| 和黑帮大佬的365 | 国内精品视频一区二区三区 | 中文字幕一区二区在线观看 | 国产成人无码精品亚洲 | 熟妇高潮喷沈阳45熟妇高潮喷 | 欧美三级久久久 | 四虎首页 | 亚洲精品久久久久久无码色欲四季 | 调教一区二区 | 色婷婷av一区二区三区大白胸 | 97精品人妻一区二区三区 | 亚洲日本中文 | 懂色aⅴ一区二区三区免费 国产精品99在线观看 | 午夜爽视频 | 欧美黄色大片免费看 | 日韩不卡av | 亚洲精品乱码久久久久久蜜桃动漫 | 91婷婷| 日韩成人在线观看 | 91传媒在线免费观看 | 黑料网在线观看 | 国产精品区在线观看 | 粗了大了 整进去好爽视频 日本女优中文字幕 | 五月婷丁香 | 欧美自拍在线 | 熟妇人妻无乱码中文字幕真矢织江 | 国产地址 | 牛牛av国产一区二区 | 亚洲天堂一区二区三区四区 | 怡红院一区二区三区 | 老湿福利影院 | 国产日产久久高清欧美一区 |