您的位置:首页 > 产品设计 > UI/UE

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

2015-10-03 17:46 453 查看
一、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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: