当iOS程序触发某种条件的时候,跳出提示框
/**
* 参数:
* 1·标题
* 2·信息
* 3·代理
* 4·取消按钮
* 5·确定按钮
*/
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"通知" message:@"恭喜通关了!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
UI基础复习
1> UIButton -> UIControl -> UIView
1.1 设置控件的状态
启用、禁用
@property(nonatomic,getter=isEnabled) BOOL enabled;
选中、不选中
@property(nonatomic,getter=isSelected) BOOL selected;
高亮或者不高亮
@property(nonatomic,getter=isHighlighted) BOOL highlighted;
1.2 设置控件内容的布局
垂直居中方向
@property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment;
水平居中方向
@property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment;
1.3 添加/删除监听方法
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
- (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
2> UILabel -> UIView
3> UIImageView -> UIView
4> UITextField -> UIControl
* 代理设计模式,在OC中,使用最为广泛的一种设计模式
1> 代理的用处是什么?
* 监听那些不能通过addTarget监听的事件!
* 主要用来负责在两个对象之间,发生某些事件时,来传递消息或者数据
2> 代理的实现步骤
(1) 成为(子)控件的代理,父亲(控制器)成为儿子(文本框)的代理
(2) 遵守协议->利用智能提示,快速编写代码
(3) 实现协议方法
// 将监听方法,注册到"运行循环",当按钮被点击后,"运行循环"通知视图控制器执行@selector的方法
[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
协议
协议的写法:
#import <Foundation/Foundation.h>
@protocol WithProtocol <NSObject>
//默认是必须实现的
//必须实现
@required
- (void)finshTask;
- (void)dontLate;
//可选实现
@optional
- (void)wearNeat;
@end
协议的用法:直接让某个类遵守协议
#import "xxx.h"
@interface xxx : NSObject <xxx.h>
// 协议中有@optional标志的方法是可选实现的
// 协议中有@required标志的方法是必须实现的
@end
UIScrollView
contentSize 会根据边框调整offset
contentInset 不会调整offset
比如:
/**
1. 如果先设置间距,再设置内容,那么坐标的点是(0,64)
2. 如果先设置内容,再设置间距,那么坐标的点是(0,0)
*/
self.scrollView.contentInset = UIEdgeInsetsMake(64, 0 ,0, 0);
CGFloat wight = self.scrollView.bounds.size.width;
// 下面两个函数等价
CGFloat hight = CGRectGetMaxY(self.lastButton.frame)+10;
// CGFloat hight = self.lastButton.bounds.size.height+self.lastButton.frame.origin.y;
self.scrollView.contentSize = CGSizeMake(wight, hight);
self.scrollView.bounces = YES;
// self.scrollView.contentOffset = CGPointMake(0, -64);
- 实现大图小图的缩放:
// 加一个代理,需要遵循协议
self.scrollView.delegate = self;
// 设置最大最小缩放比例
self.scrollView.maximumZoomScale = 2.0;
self.scrollView.minimumZoomScale = 0.2;
...
// 写一个代理方法
// 告诉ScrollView要缩放的是谁,具体的缩放实现是由ScrollView来完成的
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.imageView;
}
// 滚动视图即将开始缩放,通常不需要实现
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
{
}
// 完成缩放,通常不需要实现
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
NSLog(@"%s",__func__);
}
// 正在缩放,通常不需要实现
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
NSLog(@"%s",__func__);
}
UIScrollView的属性总结
类型 | 属性 | 作用 |
---|---|---|
CGPoint | contentOffSet | 监控目前滚动的位置 |
CGSize | contentSize | 滚动范围的大小 |
UIEdgeInsets | contentInset | 视图在scrollView中的位置 |
id | delegate | 设置协议 |
BOOL | directionalLockEnabled | 指定控件是否只能在一个方向上滚动 |
BOOL | bounces | 控制控件遇到边框是否反弹 |
BOOL | alwaysBounceVertical | 控制垂直方向遇到边框是否反弹 |
BOOL | alwaysBounceHorizontal | 控制水平方向遇到边框是否反弹 |
BOOL | pagingEnabled | 控制控件是否整页翻动 |
BOOL | scrollEnabled | 控制控件是否能滚动 |
BOOL | showsHorizontalScrollIndicator | 控制是否显示水平方向的滚动条 |
BOOL | showsVerticalScrollIndicator | 控制是否显示垂直方向的滚动条 |
UIEdgeInsets | scrollIndicatorInsets | 指定滚动条在scrollerView中的位置 |
UIScrollViewIndicatorStyle | indicatorStyle | 设定滚动条的样式 |
float | decelerationRate | 改变scrollerView的减速点位置 |
BOOL | tracking | 监控当前目标是否正在被跟踪 |
BOOL | dragging | 监控当前目标是否正在被拖拽 |
BOOL | decelerating | 监控当前目标是否正在减速 |
BOOL | delaysContentTouches | 控制视图是否延时调用开始滚动的方法 |
BOOL | canCancelContentTouches | 控制控件是否接触取消touch的事件 |
float | minimumZoomScale | 缩小的最小比例 |
float | maximumZoomScale | 放大的最大比例 |
float | zoomScale | 设置变化比例 |
BOOL | bouncesZoom | 控制缩放的时候是否会反弹 |
BOOL | zooming | 判断控件的大小是否正在改变 |
BOOL | zoomBouncing | 判断是否正在进行缩放反弹 |
BOOL | scrollsToTop | 控制控件滚动到顶部 |
这里把UIScrollView的几个要点总结下:
从你的手指touch屏幕开始,scrollView开始一个timer,如果:
* 150ms内如果你的手指没有任何动作,消息就会传给subView。
* 150ms内手指有明显的滑动(一个swipe动作),scrollView就会滚动,消息不会传给subView,这里就是产生问题二的原因。
* 150ms内手指没有滑动,scrollView将消息传给subView,但是之后手指开始滑动,scrollView传送touchesCancelled消息给subView,然后开始滚动。
观察下tableView的情况,你先按住一个cell,cell开始高亮,手不要放开,开始滑动,tableView开始滚动,高亮取消。
* delaysContentTouches的作用:
* 这个标志默认是YES,使用上面的150ms的timer,如果设置为NO,touch事件立即传递给subView,不会有150ms的等待。
* cancelsTouches的作用:
* 这个标准默认为YES,如果设置为NO,这消息一旦传递给subView,这scroll事件不会再发生。
- NSTimer
开始一个时钟
/**
* 参数说明:
* 1· 时间间隔
* 2· 监听时钟触发的对象
* 3· 调用方法
* 4· userinfo,可以是任意对象,通常传递nil
* 5· repeat:是否重复
*/
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimer:) userInfo:@"hello timer" repeats:YES]
停止一个时钟
- (IBAction)pause
{
// 停止时钟,invalidate是唯一停止时钟的方法
// 一旦调用了 invalidate 方法,timer就无效了,如果再次启动时钟,需要重新实例化
[self.timer invalidate];
}