2015/10/3 iOS 笔记 细节 iOS9中UIAlertController的简单使用 ScrollView NSTimer

一、iOS9中UIAlertController的简单使用

很明显,简单的UIAlertView已经不能用了,我感觉很伤心。

  // 创建

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"开始了" message:@"开始了!" preferredStyle:UIAlertControllerStyleActionSheet];

  // UIAlertControllerStyleActionSheet 是显示在屏幕底部

  // UIAlertControllerStyleAlert 是显示在中间

// 设置按钮

UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];

UIAlertAction *defult = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];

//        UIAlertAction *destructive = [UIAlertAction actionWithTitle:@"destructive" style:UIAlertActionStyleDestructive handler:nil];

// 添加按钮

[alert addAction:cancel];

[alert addAction:defult];

//        [alert addAction:destructive];

//显示

[self presentViewController:alert animated:YES completion:nil];

——----——————// 复杂的,添加TextField,并监听。

注:文本输入框只能添加到Alert的风格中,ActionSheet是不允许的

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField){

textField.placeholder = @"登陆";

}];

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField){

textField.placeholder = @"密码";

textField.secureTextEntry = YES;

}];

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField){

textField.placeholder = @"添加监听代码";

// 要设置UITextFieldText的代理

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(alertTextFieldTextDidChange:) name:UITextFieldTextDidChangeNotification object:textField];

}];

[self presentViewController:alert animated:YES completion:nil];

// 监听方法实现

- (void)alertTextFieldTextDidChange:(NSNotification *)notification

{

UIAlertController *alert = (UIAlertController *)self.presentedViewController;

if (alert) {

// 下标为2的是最后一个,添加了监听的 alert.textFields[2]

UITextField *lisen = alert.textFields[2];

// 限制输出长度,超过6个则不允许点击确认键

// 超过6个按钮变灰色 enabled = NO;

UIAlertAction *action = alert.actions.lastObject;

action.enabled = lisen.text.length <= 6;

}

}

效果是这样的!

二、NSTimer

NSTimer准确吗?如果不准备,怎么办?

不准确。通常用来有一定时间跨度的周期性时间的处理!

处理Timer可以用多线程,在游戏中多用CADisplayLink。

/**

参数说明

1. 时间间隔,double

2. 监听时钟触发的对象

3. 调用方法

4. userInfo,可以是任意对象,通常传递nil

5. repeats:是否重复

*/

// scheduledTimerWithTimeInterval 方法本质上就是创建一个时钟,

// 添加到运行循环的模式是DefaultRunLoopMode

// ----------------------------------------------

// 1>

//    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimer:) userInfo:@"hello timer" repeats:YES];

// ----------------------------------------------

// 2> 与1等价

//    self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];

//    // 将timer添加到运行循环

//    // 模式:默认的运行循环模式

//    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];

// ----------------------------------------------

// 3>

self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];

// 将timer添加到运行循环

// 模式:NSRunLoopCommonModes的运行循环模式(监听滚动模式)

[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

// 停止时钟,invalidate是唯一停止时钟的方法

// 一旦调用了invalidate方法,timer就无效了,如果再次启动时钟,需要重新实例化

[self.timer invalidate];

三、ScrollView

/**

放大缩小

1> 设置代理

2> 指定最大/最小的缩放比例

*/

// 图像的setter

- (void)setImage:(UIImage *)image

{

_image = image;

// 设置图像视图的内容

self.imageView.image = image;

// 让图像视图根据图像自动调整大小

[self.imageView sizeToFit];

// 告诉scrollView内部内容的实际大小

self.scrollView.contentSize = image.size;

}

/**

在getter方法中

* 如果是属性自身的,使用_成员变量

* 如果是其他属性,使用self. getter方法,从而可以保证如果该对象没有被实例化,能够及时的被创建并加载

*/

- (UIImageView *)imageView

{

if (_imageView == nil) {

_imageView = [[UIImageView alloc] init];

[self.scrollView addSubview:_imageView];

}

return _imageView;

}

- (UIScrollView *)scrollView

{

if (_scrollView == nil) {

_scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];

// 设置属性

// 设置边距

_scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);

// 不显示水平滚动标示

_scrollView.showsHorizontalScrollIndicator = NO;

// 不显示垂直滚动标示

_scrollView.showsVerticalScrollIndicator = NO;

// *** 偏移位置

_scrollView.contentOffset = CGPointMake(0, 0);

// 取消弹簧效果,内容固定,不希望出现弹簧效果时

// 不要跟bounds属性搞混了

_scrollView.bounces = NO;

// 设置代理

_scrollView.delegate = self;

// 设置最大/最小缩放比例

_scrollView.maximumZoomScale = 2.0;

_scrollView.minimumZoomScale = 0.2;

[self.view addSubview:_scrollView];

}

return _scrollView;

}

- (void)viewDidLoad

{

[super viewDidLoad];

// 设置图像

self.image = [UIImage imageNamed:@"minion"];

UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];

btn.center = self.view.center;

[self.view addSubview:btn];

[btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];

}

- (void)click

{

// 移动大图的偏移位置

CGPoint offset = self.scrollView.contentOffset;

offset.x += 20;

offset.y += 20;

// 注意:设置contentOffset会忽略contentSize

self.scrollView.contentOffset = offset;

}

#pragma mark - UIScrollView的代理方法

/**

1> 设置了代理

2> 指定了最大、最小的缩放比例

表示ScrollView是可以缩放的

代理方法的"返回值"实际上就是控制器告诉滚动视图,要缩放的是UIImageView

*/

// 告诉ScrollView要缩放的视图是谁,具体的缩放实现,是由ScrollView来完成的

// 1> scrollView要知道缩放谁

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

{

return self.imageView;

}

// 2> 滚动视图即将开始缩放,通常不需要写

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view

{

NSLog(@"%s", __func__);

}

// 3> 正在缩放,通常也不需要实现

- (void)scrollViewDidZoom:(UIScrollView *)scrollView

{

//    NSLog(@"%s", __func__);

NSLog(@"%@", NSStringFromCGAffineTransform(self.imageView.transform));

}

// 4> 完成缩放,通常也不需要实现

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale

{

NSLog(@"%s", __func__);

}

________________________________________________________________________________________

运行循环演示

int main(int argc, const char * argv[])

{

@autoreleasepool {

int selection = -1;

while (YES) {

printf("请输入选择,0表示退出:");

scanf("%d", &selection);

if (selection == 0) {

printf("欢迎下次再来!88\n");

break;

} else {

printf("您选择了第 %d 项功能\n", selection);

}

}

}

return 0;

}

时间: 2024-10-22 11:38:30

2015/10/3 iOS 笔记 细节 iOS9中UIAlertController的简单使用 ScrollView NSTimer的相关文章

2015/10/6 iOS 笔记 细节 应用中常见文件

1,工程名-info.plist文件 bundle display name 应用显示的名称(10到12个字符,超过显示...) bundle identifier  应用的唯一标识 com.xx.hhxx bundle version 软件版本号 supported interface orientation 屏幕旋转 默认支持三种模式 2,应用中常见文件 工程名-Prefix.pch (新版没有这个文件了) pch头文件的内容能被项目中得其他所有源文件共享和访问 一般在pch头文件中定义一些

2015/10/4 iOS 笔记 细节 简单-代理过程 UITableView

一.简单-代理过程 1,创建代理 @class TgFootView; @protocol TgFootViewDelegate <NSObject> @optional   可选是否实现 视图的下载按钮被点击 - (void)tgFootViewDidDownloadButtonClick:(TgFootView *)footView; @end @interface TgFootView : UIView 代理如果使用强引用,就会产生循环引用,造成控制器和子视图都无法被释放,造成内存泄露.

2015/10/2 iOS笔记 细节

一.按钮不能交互的几种情况 1,alpha <= 0.01 (0.02就能点了) 2,hidden = YES 3, userInteraction = NO 4, 所在的父视图不允许交互,按钮也不能交互 5,在父视图可见范围内可以交互,超出范围的部分不能交互. 二.UIImageView 默认 不允许用户交互的. 三.乱序 - (void)randomOptions { // 对option数组乱序 [self.options sortedArrayUsingComparator:^NSCom

iOS笔记 每天更新中...

1 //1 懒加载创建数组 读取plist文件 2 - (NSArray *)appInfos 3 { 4 if (_appInfos == nil) { 5 //1.1 bundle 6 NSBundle *bundle = [NSBundle mainBundle]; 7 //1.2 获取plist的路径 8 NSString *path = [bundle pathForResource:@"app" ofType:@"plist"]; 9 //1.3 加载p

JavaEE完全实战详解笔记--在Eclipse中创建一个简单的web项目

下面演示了Eclipse开发JavaEE的通用步骤--配置一个简单的web应用,不同版本的Eclipse可能略有不同,但是基本不会有太大出入. 这里就以"eclipse-jee-luna-SR2-win32"+"apache-tomcat-8.0.21-windows-x86"版本为例,(截止2015年5月份的最新版): (详细过程看图) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.

【iOS开发每日小笔记(九)】在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习. 一直想写一篇关于runloop学习有所得的文章,总是没有很好的例子.正巧自己的上线App Store的小游戏<跑酷好基友>(https://itunes.apple.com/us/app/pao-k

兼容iOS 10 资料整理笔记-b

原文链接:http://www.jianshu.com/p/0cc7aad638d9 1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserNotifications的易用,功能也变得非常强大. iOS 9 以前的通知 1.在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼. 2.应用在运行时和非运行时捕获通知的路径还不一致. 3.

兼容iOS 10 资料整理笔记

1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserNotifications的易用,功能也变得非常强大. iOS 9 以前的通知 1.在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼. 2.应用在运行时和非运行时捕获通知的路径还不一致. 3.应用在前台时,是无法直接显示远程通知,还需要进一步处理. 4.已经发出的通知是不能更新

iOS 9应用开发教程之ios9中实现button的响应

iOS 9应用开发教程之ios9中实现button的响应 IOS9实现button的响应 button主要是实现用户交互的.即实现响应.button实现响应的方式能够依据加入button的不同分为两种:一种是编辑界面加入button实现的响应:还有一种是使用代码加入button实现的响应. 1.编辑界面加入button实现的响应 使用编辑界面加入button能够使用拖动的方式来实现button的响应,它也是最简单的一种实现响应的方式. [演示样例2-4]下面将实现轻拍button,改变主视图背景