iOS开发小白学习体验-3

当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的属性总结

类型属性作用
CGPointcontentOffSet监控目前滚动的位置
CGSizecontentSize滚动范围的大小
UIEdgeInsetscontentInset视图在scrollView中的位置
iddelegate设置协议
BOOLdirectionalLockEnabled指定控件是否只能在一个方向上滚动
BOOLbounces控制控件遇到边框是否反弹
BOOLalwaysBounceVertical控制垂直方向遇到边框是否反弹
BOOLalwaysBounceHorizontal控制水平方向遇到边框是否反弹
BOOLpagingEnabled控制控件是否整页翻动
BOOLscrollEnabled控制控件是否能滚动
BOOLshowsHorizontalScrollIndicator控制是否显示水平方向的滚动条
BOOLshowsVerticalScrollIndicator控制是否显示垂直方向的滚动条
UIEdgeInsetsscrollIndicatorInsets指定滚动条在scrollerView中的位置
UIScrollViewIndicatorStyleindicatorStyle设定滚动条的样式
floatdecelerationRate改变scrollerView的减速点位置
BOOLtracking监控当前目标是否正在被跟踪
BOOLdragging监控当前目标是否正在被拖拽
BOOLdecelerating监控当前目标是否正在减速
BOOLdelaysContentTouches控制视图是否延时调用开始滚动的方法
BOOLcanCancelContentTouches控制控件是否接触取消touch的事件
floatminimumZoomScale缩小的最小比例
floatmaximumZoomScale放大的最大比例
floatzoomScale设置变化比例
BOOLbouncesZoom控制缩放的时候是否会反弹
BOOLzooming判断控件的大小是否正在改变
BOOLzoomBouncing判断是否正在进行缩放反弹
BOOLscrollsToTop控制控件滚动到顶部

这里把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事件不会再发生。

UIScrollView的属性总结

  • 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];
}
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页