你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 拜托與文本輸出(內容依據iOS編程編寫)

iOS 拜托與文本輸出(內容依據iOS編程編寫)

編輯:IOS開發綜合

•文本框(UITextField)

  本章節持續編纂 JXHypnoNerd 。文件地址 。

  起首我們持續編纂 JXHypnosisViewController.m 修正 loadView 辦法,向 view 中添加一個 UITextField 對象:

#import "JXHypnosisViewController.h"
#import "JXHypnosisView.h"
@interface JXHypnosisViewController ()
@end
@implementation JXHypnosisViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// 設置標簽項的題目
self.tabBarItem.title = @"Hypnotize";
// 從圖片文件創立一個 UIImage 對象
UIImage * i = [UIImage imageNamed:@"Hypno"];
// 將 UIImage 對象賦值給標簽項的 iamge 屬性
self.tabBarItem.image = i;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)loadView {
// 創立一個 JXHypnosisView 對象
JXHypnosisView * backgroundView = [[JXHypnosisView alloc] init];
CGRect textFieldRect = CGRectMake(40, 70, 240, 30);
UITextField * textField = [[UITextField alloc] init];
textField.frame = textFieldRect;
// 設置 UITextField 對象的邊框款式,便於檢查它在屏幕上的地位
textField.borderStyle = UITextBorderStyleRoundedRect;
[backgroundView addSubview:textField];
// 將 JXHypnosisView 對象賦給視圖掌握器的view 屬性
self.view = backgroundView;
}
@end

  構建並運轉運用,項目中會顯示一個文本框,該文本框就是適才我們添加的 UITextField 對象。點擊文本框,這時候屏幕底部就會彈出鍵盤,用於向文本框中輸出文字,上面我們引見一下第一呼應者。

•UIResponder

  UIResponder 是 UIKit 框架中的一個籠統類。之前我們懂得過他的幾個子類。

1.  UIView

2.  UIViewController

3. UIApplication

  UIResponder 界說了一系列辦法,用於吸收和處置用戶事宜,例如 觸摸事宜、活動事宜(搖擺裝備)和功效掌握事宜(如編纂文本或許音樂播放)等。 UIResponder 的子類會籠罩這些辦法,完成本身的事宜呼應代碼。

  在以上事宜中,觸摸事宜明顯應當由被觸摸的視圖擔任處置。體系會將觸摸事宜直接發送給被觸摸的視圖。

  其他類型的事宜則會由第一呼應者擔任處置,UIWindow 有一個 firstResponder 屬性指向第一呼應者。例如,當用戶點擊 UITextField 對象時, UITextField 對象就會成為第一呼應者。UIWindow 會將 firstResponder 指向該對象,以後,假如運用吸收到活動事宜和功效掌握事宜,都邑發送給 UITextField 對象。

  當某個 UITextField 對象或 UITextView 對象成為第一呼應者時,屏幕就會彈出鍵盤。除用戶點擊以外,還可以在代碼中向 UITextField 對象發送 becomeFirstResponder 新聞,使其成為第一呼應者。相反,假如要封閉鍵盤,則可以向 UITextField 對象發送 resignFirstResponder 新聞,且請求改對象廢棄第一呼應者狀況。一旦第一呼應者不是 UITextField 對象,鍵盤就會消逝。

  現實上,年夜部門視圖都不須要成為第一呼應者。例如 UISlider 對象,該對象只會處置觸摸事宜(用戶拖拽滑塊),而不會吸收其他類型的事宜,是以它不須要成為第一呼應者。

•設置 UITextField 的鍵盤

  UITextField 對象有一系列屬性,用於設置彈出的鍵盤。上面就修正這些屬性,為 UITextField 對象添加占位符文本,並修正鍵盤的換行鍵盤類型。

#import "JXHypnosisViewController.h"
#import "JXHypnosisView.h"
@interface JXHypnosisViewController ()
@end
@implementation JXHypnosisViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// 設置標簽項的題目
self.tabBarItem.title = @"Hypnotize";
// 從圖片文件創立一個 UIImage 對象
UIImage * i = [UIImage imageNamed:@"Hypno"];
// 將 UIImage 對象賦值給標簽項的 iamge 屬性
self.tabBarItem.image = i;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)loadView {
// 創立一個 JXHypnosisView 對象
JXHypnosisView * backgroundView = [[JXHypnosisView alloc] init];
CGRect textFieldRect = CGRectMake(40, 70, 240, 30);
UITextField * textField = [[UITextField alloc] init];
textField.frame = textFieldRect;
// 設置 UITextField 對象的邊框款式,便於檢查它在屏幕上的地位
textField.borderStyle = UITextBorderStyleRoundedRect;
// 修正占位符
textField.placeholder = @"Hypontize me";
// 修正鍵盤類型
textField.returnKeyType = UIReturnKeyDone;
[backgroundView addSubview:textField];
// 將 JXHypnosisView 對象賦給視圖掌握器的view 屬性
self.view = backgroundView;
}
@end

  構建並運轉,在法式中就會發明有一行占位符文本 Hypontize me ,當用戶在法式中輸出文字的時刻,占位文本就會消逝。換行鍵不再顯示默許的 Return,而是 Done。

  然則,假如我們點擊 Done 就會發明沒有任何反響。現實上,修正換行鍵盤的類型常識轉變了換行鍵的外不雅,假如須要完成用戶點擊換行鍵後的功效,必需完成編寫呼應的代碼。在編寫代碼之前,在引見 UITextField 對象中別的介個有效的屬性

•拜托

  我們曉得 目的-舉措(Target-Action)設計形式。目的-舉措 是 UIKit 中平日用的設計形式之一。目的-舉措的任務方法為:當某個特定的事宜產生時(例如按下按鈕),產生事宜的一方會向指定的目的對象發送一個之前設定好的舉措新聞。一切繼續 UIControl 對象都可以設置目的-舉措。

  在 目的-舉措中,針對分歧的事宜,須要創立分歧的舉措新聞。UIButton 對象的事宜比擬簡略,平日只須要處置點擊事宜:相反,像 UITextField 這類事宜龐雜的對象,巨大的蘋果應用了 拜托設計形式 。UITextField 對象具有一個拜托屬性,經由過程為 UITextField 對象設置拜托,UITextField 對象會在產生事宜時向拜托發送呼應的新聞,由拜托處置該時光。例如,關於編纂 UITextField 對象文本內容的事宜,有對象的拜托辦法。

@protocol UITextFieldDelegate <NSObject>
@optional
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField; // return NO to disallow editing.
- (void)textFieldDidBeginEditing:(UITextField *)textField; // became first responder
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField; // return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end
- (void)textFieldDidEndEditing:(UITextField *)textField; // may be called if forced even if shouldEndEditing returns NO (e.g. view removed from Window) or endEditing:YES called
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text
- (BOOL)textFieldShouldClear:(UITextField *)textField; // called when clear button pressed. return NO to ignore (no notifications)
- (BOOL)textFieldShouldReturn:(UITextField *)textField; // called when 'return' key pressed. return NO to ignore.
@end

  留意:在拜托辦法中,平日應當將對象本身作為第一個參數。多個對象能夠具有雷同的拜托,當拜托收到新聞的時刻,須要依據該參數斷定發送該新聞的對象。例如,假如某個視圖掌握器中包括多個 UITextField 對象,它們的拜托都是該視圖掌握器,那末視圖掌握器就須要依據 textField 參數獲得呼應的 UITextField 對象並履行分歧的操作。

  上面我們就將 UITextField 對象所位於的視圖掌握器- JXHypnosisViewController 設置為它的拜托,並完成 textFieldShouldReturn: 拜托辦法,當用戶點擊 Done 按鈕時,UITextField 對象就會挪用該辦法。

  翻開 JXHypnosisViewController 修正 loadView 辦法,將 UITextField 對象的拜托屬性設置為 JXHypnosisViewController 本身。

   textFieldShouldReturn: 只要一個參數,就是用戶點擊換行鍵的響應 UITextField 對象。今朝,運用只會向掌握台輸入 UITextField 對象的文本內容。

  接上去在代碼中完成 textFieldShouldReturn: 辦法。

#import "JXHypnosisViewController.h"
#import "JXHypnosisView.h"
@interface JXHypnosisViewController ()
@end
@implementation JXHypnosisViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// 設置標簽項的題目
self.tabBarItem.title = @"Hypnotize";
// 從圖片文件創立一個 UIImage 對象
UIImage * i = [UIImage imageNamed:@"Hypno"];
// 將 UIImage 對象賦值給標簽項的 iamge 屬性
self.tabBarItem.image = i;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)loadView {
// 創立一個 JXHypnosisView 對象
JXHypnosisView * backgroundView = [[JXHypnosisView alloc] init];
CGRect textFieldRect = CGRectMake(40, 70, 240, 30);
UITextField * textField = [[UITextField alloc] init];
textField.frame = textFieldRect;
// 設置 UITextField 對象的邊框款式,便於檢查它在屏幕上的地位
textField.borderStyle = UITextBorderStyleRoundedRect;
// 修正占位符
textField.placeholder = @"Hypontize me";
// 修正鍵盤類型
textField.returnKeyType = UIReturnKeyDone;
textField.delegate = self;
[backgroundView addSubview:textField];
// 將 JXHypnosisView 對象賦給視圖掌握器的view 屬性
self.view = backgroundView;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"%@",textField.text);
return YES;
}
@end

  構建並運轉法式,便可以在掌握台打印信息,然則這裡會有一處正告,臨時先不論。

  請留意, JXHypnosisViewController 不須要完成 UITextField 對象的一切拜托辦法,UITextField 對象會在運轉時檢討拜托辦法能否完成了某個辦法,假如沒有完成 UITextField 對象就不會挪用該辦法。

•協定

  但凡支撐拜托的對象,其面前都有一個響應的協定,聲明可以向該對象(例如:UITextField)的拜托對象(例如:JXHypnosisViewController)發送的新聞。拜托對象(例如:JXHypnosisViewController)須要依據這個協定為其呼應的事宜完成呼應的辦法。假如一個類完成了某個協定中劃定的辦法,就稱這個類遵照該協定。

  聲明協定的語法是,應用 @protocol 指令開首,後跟協定的稱號(例如:UITextFieldDelegate)。尖括號裡的 NSObject 是指只 NSObject 協定,其感化是聲明 UITextFieldDelegate 中包括 NSObject 協定的全體辦法。接著聲明新協定獨有的辦法,最初應用 @end 指令來停止。

  協定不是類,只是一組辦法聲明。不克不及為協定創立對象,或許添加實例變量。協定本身不完成辦法,須要由遵照響應協定的類來完成。

  協定所聲明的辦法可所以必需的(required)或許是可選的(optional)。協定辦法默許都是必需的,所以當我們自界說協定的時刻最好設置一下。應用 @optional 指令,可以將寫在該指令以後的辦法去全體聲明為可選的。

  發送方在發送可選辦法之前,都邑先向其拜托發送另外一個名為 respondsToSelector: 的新聞。一切Objective-C 對象都從 NSObject 繼續了 respondsToSelector: 辦法,該辦法能在運轉時檢討對象能否完成了指定的辦法。 @selector() 指令可以將選擇器(selector)轉換成數值,以便將其作為參數停止傳遞。

- (void)clearButtonTapped {
// textFieldShouldClear:是可選辦法,須要先檢討拜托能否完成了該辦法
SEL clearSelector = @selector(textFieldShouldClear:);
if ([self.delegate respondsToSelector:clearSelector]) {
self.text = @"";
}
}

  假如某個辦法是必需的,那末發送發可以直接向其拜托對象發送響應的新聞,不消檢討拜托對象能否完成了該辦法。這也就意味著,假如拜托對象沒有完成響應的辦法,運用就會拋出地位選擇器(unrecognized selector)異常,招致運用瓦解。

  為了避免成績,編譯器會檢討某個類能否完成了相干協定的必需辦法。要讓編譯器可以或許履行此類檢討,必需將響應的類聲明為遵照指定的協定,其語法格局為:在頭文件或類擴大 @interface 指令末尾,將類所遵照的協定以都好分隔的列表情勢寫在尖括號裡。

#import "JXHypnosisViewController.h"
#import "JXHypnosisView.h"
@interface JXHypnosisViewController ()<UITextFieldDelegate>
@end
@implementation JXHypnosisViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// 設置標簽項的題目
self.tabBarItem.title = @"Hypnotize";
// 從圖片文件創立一個 UIImage 對象
UIImage * i = [UIImage imageNamed:@"Hypno"];
// 將 UIImage 對象賦值給標簽項的 iamge 屬性
self.tabBarItem.image = i;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)loadView {
// 創立一個 JXHypnosisView 對象
JXHypnosisView * backgroundView = [[JXHypnosisView alloc] init];
CGRect textFieldRect = CGRectMake(40, 70, 240, 30);
UITextField * textField = [[UITextField alloc] init];
textField.frame = textFieldRect;
// 設置 UITextField 對象的邊框款式,便於檢查它在屏幕上的地位
textField.borderStyle = UITextBorderStyleRoundedRect;
// 修正占位符
textField.placeholder = @"Hypontize me";
// 修正鍵盤類型
textField.returnKeyType = UIReturnKeyDone;
textField.delegate = self;
[backgroundView addSubview:textField];
// 將 JXHypnosisView 對象賦給視圖掌握器的view 屬性
self.view = backgroundView;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"%@",textField.text);
return YES;
}
@end

  簡直一切的拜托都是弱援用屬性。這是為了不對象及其拜托之間發生強援用輪回。例如: JXHypnosisViewController 是 UITextField 對象的拜托,並且 UITextField 對象是 JXHypnosisViewController 的強援用屬性,假如 UITextField 對象再對其拜托堅持強援用就會在二者之間發生強援用輪回。

•向屏幕中添加UILabel對象

  上面我們在 JXHypnosisViewController 中添加一個新辦法,在屏幕中隨機地位繪制20個 UILabel 對象。同時,該辦法有一個 NSString 類型的參數,表現 UILabel 對象顯示的文字。

#import "JXHypnosisViewController.h"
#import "JXHypnosisView.h"
@interface JXHypnosisViewController ()<UITextFieldDelegate>
@end
@implementation JXHypnosisViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// 設置標簽項的題目
self.tabBarItem.title = @"Hypnotize";
// 從圖片文件創立一個 UIImage 對象
UIImage * i = [UIImage imageNamed:@"Hypno"];
// 將 UIImage 對象賦值給標簽項的 iamge 屬性
self.tabBarItem.image = i;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)loadView {
// 創立一個 JXHypnosisView 對象
JXHypnosisView * backgroundView = [[JXHypnosisView alloc] init];
CGRect textFieldRect = CGRectMake(40, 70, 240, 30);
UITextField * textField = [[UITextField alloc] init];
textField.frame = textFieldRect;
// 設置 UITextField 對象的邊框款式,便於檢查它在屏幕上的地位
textField.borderStyle = UITextBorderStyleRoundedRect;
// 修正占位符
textField.placeholder = @"Hypontize me";
// 修正鍵盤類型
textField.returnKeyType = UIReturnKeyDone;
textField.delegate = self;
[backgroundView addSubview:textField];
// 將 JXHypnosisView 對象賦給視圖掌握器的view 屬性
self.view = backgroundView;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"%@",textField.text);
return YES;
}
- (void)drawHypnoticMessage:(NSString *)message {
for (NSInteger i = 0; i < 20; i++) {
UILabel * messageLabel = [[UILabel alloc] init];
// 設置 UIlabel 對象的文字和色彩
messageLabel.backgroundColor = [UIColor clearColor];
messageLabel.textColor = [UIColor whiteColor];
messageLabel.text = message;
//依據要顯示的文字調劑 UILabel 對象的年夜小
[messageLabel sizeToFit];
// 獲得隨機 x 坐標
// 使 UILabe 對象的寬度不超越掌握器的 view 寬度
NSInteger width = self.view.bounds.size.width - messageLabel.bounds.size.width;
NSInteger x = arc4random() % width;
// 獲得隨機 y 坐標
// 使 UILabel 對象的高度不超越掌握器的 view 寬度
NSInteger height = self.view.bounds.size.height - messageLabel.bounds.size.height;
NSInteger y = arc4random() % height;
// 設置 UILabel 對象的 frame
CGRect frame = messageLabel.frame;
frame.origin = CGPointMake(x, y);
messageLabel.frame = frame;
// 將 UILabel 對象添加到掌握器的 view 中
[self.view addSubview:messageLabel];
}
}
@end

  接上去修正 textFieldShouldReturn: 將 UITextField 對象的文本內容作為 參數,調動我們自界說的辦法,以後清空文本內容,最初挪用 resignFirstResponder 封閉鍵盤。

#import "JXHypnosisViewController.h"
#import "JXHypnosisView.h"
@interface JXHypnosisViewController ()<UITextFieldDelegate>
@end
@implementation JXHypnosisViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// 設置標簽項的題目
self.tabBarItem.title = @"Hypnotize";
// 從圖片文件創立一個 UIImage 對象
UIImage * i = [UIImage imageNamed:@"Hypno"];
// 將 UIImage 對象賦值給標簽項的 iamge 屬性
self.tabBarItem.image = i;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)loadView {
// 創立一個 JXHypnosisView 對象
JXHypnosisView * backgroundView = [[JXHypnosisView alloc] init];
CGRect textFieldRect = CGRectMake(40, 70, 240, 30);
UITextField * textField = [[UITextField alloc] init];
textField.frame = textFieldRect;
// 設置 UITextField 對象的邊框款式,便於檢查它在屏幕上的地位
textField.borderStyle = UITextBorderStyleRoundedRect;
// 修正占位符
textField.placeholder = @"Hypontize me";
// 修正鍵盤類型
textField.returnKeyType = UIReturnKeyDone;
textField.delegate = self;
[backgroundView addSubview:textField];
// 將 JXHypnosisView 對象賦給視圖掌握器的view 屬性
self.view = backgroundView;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"%@",textField.text);
[self drawHypnoticMessage:textField.text];
textField.text = @"";
[textField resignFirstResponder];
return YES;
}
- (void)drawHypnoticMessage:(NSString *)message {
for (NSInteger i = 0; i < 20; i++) {
UILabel * messageLabel = [[UILabel alloc] init];
// 設置 UIlabel 對象的文字和色彩
messageLabel.backgroundColor = [UIColor clearColor];
messageLabel.textColor = [UIColor whiteColor];
messageLabel.text = message;
//依據要顯示的文字調劑 UILabel 對象的年夜小
[messageLabel sizeToFit];
// 獲得隨機 x 坐標
// 使 UILabe 對象的寬度不超越掌握器的 view 寬度
NSInteger width = self.view.bounds.size.width - messageLabel.bounds.size.width;
NSInteger x = arc4random() % width;
// 獲得隨機 y 坐標
// 使 UILabel 對象的高度不超越掌握器的 view 寬度
NSInteger height = self.view.bounds.size.height - messageLabel.bounds.size.height;
NSInteger y = arc4random() % height;
// 設置 UILabel 對象的 frame
CGRect frame = messageLabel.frame;
frame.origin = CGPointMake(x, y);
messageLabel.frame = frame;
// 將 UILabel 對象添加到掌握器的 view 中
[self.view addSubview:messageLabel];
}
}
@end

  構建並運轉。

•活動後果

  IOS裝備內嵌了很多功效壯大的傳感器,例如加快傳感器,磁場傳感器和三軸陀螺儀等。運用可以經由過程這些傳感器懂得裝備加快,偏向和角度,並完成有效的功效。例如,運用可以依據裝備的偏向主動將界面調劑為橫屏或許豎屏形式。從IOS7開端,蘋果援用了一些新 API 可以輕松為運用添加一種經由過程傳感器完成的視覺差後果。

  我們可以想象本身坐在一輛飛奔的年夜奔中,我們看想窗外,會發明遠處的景物的發展速度比近處的慢許多。這是年夜腦對空間和速度差別發生的一種錯覺,稱之為視差。在IOS7 及以後這類後果到處可見,例如,在主屏幕中,假如略微傾斜裝備,可以發明主屏幕中的圖標會跟著傾斜偏向絕對於壁紙挪動。

  運用可以經由過程 UIInterpolatingMotionEffect 類來完成雷同的後果,我們只須要創立一個 UIInterpolatingMotionEffect 對象,設置其偏向(垂直或許程度)、鍵路勁(key path,須要應用視差後果的屬性)和絕對最小/最年夜值(視覺差的規模),再將其添加到某個視圖上,該視圖就可以取得響應的視差後果。

#import "JXHypnosisViewController.h"
#import "JXHypnosisView.h"
@interface JXHypnosisViewController ()<UITextFieldDelegate>
@end
@implementation JXHypnosisViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// 設置標簽項的題目
self.tabBarItem.title = @"Hypnotize";
// 從圖片文件創立一個 UIImage 對象
UIImage * i = [UIImage imageNamed:@"Hypno"];
// 將 UIImage 對象賦值給標簽項的 iamge 屬性
self.tabBarItem.image = i;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)loadView {
// 創立一個 JXHypnosisView 對象
JXHypnosisView * backgroundView = [[JXHypnosisView alloc] init];
CGRect textFieldRect = CGRectMake(40, 70, 240, 30);
UITextField * textField = [[UITextField alloc] init];
textField.frame = textFieldRect;
// 設置 UITextField 對象的邊框款式,便於檢查它在屏幕上的地位
textField.borderStyle = UITextBorderStyleRoundedRect;
// 修正占位符
textField.placeholder = @"Hypontize me";
// 修正鍵盤類型
textField.returnKeyType = UIReturnKeyDone;
textField.delegate = self;
[backgroundView addSubview:textField];
// 將 JXHypnosisView 對象賦給視圖掌握器的view 屬性
self.view = backgroundView;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[self drawHypnoticMessage:textField.text];
textField.text = @"";
[textField resignFirstResponder];
return YES;
}
- (void)drawHypnoticMessage:(NSString *)message {
for (NSInteger i = 0; i < 20; i++) {
UILabel * messageLabel = [[UILabel alloc] init];
// 設置 UIlabel 對象的文字和色彩
messageLabel.backgroundColor = [UIColor clearColor];
messageLabel.textColor = [UIColor whiteColor];
messageLabel.text = message;
//依據要顯示的文字調劑 UILabel 對象的年夜小
[messageLabel sizeToFit];
// 獲得隨機 x 坐標
// 使 UILabe 對象的寬度不超越掌握器的 view 寬度
NSInteger width = self.view.bounds.size.width - messageLabel.bounds.size.width;
NSInteger x = arc4random() % width;
// 獲得隨機 y 坐標
// 使 UILabel 對象的高度不超越掌握器的 view 寬度
NSInteger height = self.view.bounds.size.height - messageLabel.bounds.size.height;
NSInteger y = arc4random() % height;
// 設置 UILabel 對象的 frame
CGRect frame = messageLabel.frame;
frame.origin = CGPointMake(x, y);
messageLabel.frame = frame;
// 將 UILabel 對象添加到掌握器的 view 中
[self.view addSubview:messageLabel];
UIInterpolatingMotionEffect * motionEffect;
motionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
motionEffect.minimumRelativeValue = @(-25);
motionEffect.maximumRelativeValue = @(25);
[messageLabel addMotionEffect:motionEffect];
motionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
motionEffect.minimumRelativeValue = @(-25);
motionEffect.maximumRelativeValue = @(25);
[messageLabel addMotionEffect:motionEffect];
}
}
@end

  測試活動後果必需在真機上。

•深刻進修:main() 和 UIApplication

  用C說話編寫的法式,其至此誰人進口都是 main() 。用 Objective-C 說話編寫的法式也是如許。

  在 JXHypnoNerd 項目中我們在 mian.m,可以看到有以下代碼

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

  這段代碼中的 UIApplicationMain 函數會創立一個 UIApplication 對象。 每一個iOS運用都有且只要一個UIApplication對象,該對象的感化就是保護運轉輪回。一旦法式創立了某個 UIApplication 對象,該對象的運轉輪回就會一向輪回下去,main() 的履行也會是以梗塞。

  另外, UIApplicationMain 函數還會創立某個指定類的對象,並將其設置為 UIApplication 對象的 delegate 。該對象的類是由 UIApplicationMain 函數的最初一個實參指定的,該實參的類型是 NSString 對象,代表的是某個類的類名。所以在以上這段代碼中, UIApplicationMain 會創立一個 AppDelegate 對象,並將其設置為 UIApplication 對象的 delegate 。

  在運用啟動運轉輪回並開端吸收事宜之前,UIApplication 對象會向其拜托發送一個特征的新聞,使運用能無機會完成響應的初始化任務。這個新聞的稱號是

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

以上所述是小編給年夜家引見的iOS 拜托與文本輸出(內容依據iOS編程編寫),願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對本站網站的支撐!

【iOS 拜托與文本輸出(內容依據iOS編程編寫)】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved