网站首页

金沙4066官网的点击事件

16 8月 , 2019  

解决UIScrollView 的点击事件,uiscrollview事件

目前有两种方法

第一种 通过 Category 扩展 UIScrollView
对象,添加触摸事件,(不建议,后续扩展不方便)代码如下

@implementation UIScrollView (ExtendTouch)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesBegan:touches withEvent:event];
    [super touchesBegan:touches withEvent:event];
    UITouch *touch = [touches anyObject];
    CGFloat startx = [touch locationInView:self].x;
    NSLog(@"%f",startx);
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesMoved:touches withEvent:event];
    [super touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesEnded:touches withEvent:event];
    [super touchesEnded:touches withEvent:event];
}

 第二种 添加手势 (推荐,易于维护)

    //添加点按击手势监听器
    UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapUiscrollView:)];
    //设置手势属性
    tapGesture.delegate = self;
    tapGesture.numberOfTapsRequired=1;//设置点按次数,默认为1,注意在iOS中很少用双击操作
    tapGesture.numberOfTouchesRequired=1;//点按的手指数
    [self.scrllview addGestureRecognizer:tapGesture];

  

@interface ViewController ()<UIScrollViewDelegate,UIGestureRecognizerDelegate>

  

的点击事件,uiscrollview事件
目前有两种方法 第一种 通过 Category 扩展 UIScrollView
对象,添加触摸事件,(不建议,后续扩展不方便…

目前有两种方法

当用户触摸视图时,视图会收到 touchesBegan:withEvent:
消息,该消息用来处理触摸事件。

第一种 通过 Category 扩展 UIScrollView
对象,添加触摸事件,(不建议,后续扩展不方便)代码如下

产生一个随机的 UIColor 对象,示例代码:

@implementation UIScrollView (ExtendTouch)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesBegan:touches withEvent:event];
    [super touchesBegan:touches withEvent:event];
    UITouch *touch = [touches anyObject];
    CGFloat startx = [touch locationInView:self].x;
    NSLog(@"%f",startx);
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesMoved:touches withEvent:event];
    [super touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesEnded:touches withEvent:event];
    [super touchesEnded:touches withEvent:event];
}
// 获取三个0到1之间的数字
float red = (arc4random() % 100) / 100.0;
float green = (arc4random() % 100) / 100.0;
float blue = (arc4random() % 100) / 100.0;
UIColor *randomColor = [UIColor colorWithRed:red
                                       green:green
                                        blue:blue
                                       alpha:1.0];
self.circleColor = randomColor;

 第二种 添加手势 (推荐,易于维护)

  • 运行循环和重绘视图
    //添加点按击手势监听器
    UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapUiscrollView:)];
    //设置手势属性
    tapGesture.delegate = self;
    tapGesture.numberOfTapsRequired=1;//设置点按次数,默认为1,注意在iOS中很少用双击操作
    tapGesture.numberOfTouchesRequired=1;//点按的手指数
    [self.scrllview addGestureRecognizer:tapGesture];

iOS 应用启动时会开始一个运行循环 (run loop)
。运行循环的工作是监听事件,例如触摸。当事件发生时,运行循环会为相应的事件找到合适的处理方法,这些处理方法会调用其他方法,以此类推。只有当这些方法都执行完,控制权才会再次回到运行循环。

此时,运行循环首先会检查是否有等待重绘的视图(即收到过
setNeedsDisplay 消息的视图),然后向所有等待重绘的视图发送
drawRect: 消息,最后绘制。

  

以文本框输入为例,示意图如下:

@interface ViewController ()<UIScrollViewDelegate,UIGestureRecognizerDelegate>

视图在运行循环中重绘自己

  

iOS SDK 中提供的视图对象会自动在显示内容发生改变时向自身发送
setNeedsDisplay 消息,例如 UILabel。而自定义的 UIView
子类,则需手动向其发送 setNeedsDisplay 消息,示例代码如下:

- (void)setCircleColor:(UIColor *)circleColor {
    _circleColor = circleColor;
    [self setNeedsDisplay];
}

这样再点击视图就可以看到颜色变化了。如图:

颜色变了

  • 类扩展

BNRHypnosisView.m 文件的顶部 (@implementation 之前 )
添加的这三行代码,如下:

@interface BNRHypnosisView ()
@property (strong, nonatomic) UIColor *circleColor;
@end

称为 BNRHypnosisView 的类扩展。

作用:声明只在类的内部使用的属性和方法。可以保持头文件简洁,避免内部实现细节的暴露。

  • UIScrollView

UIScrollViewUIView 的子类,也可以使用 initWithFrame:
消息初始化,还可以作为子视图添加到其他视图。

添加 UIScrollView 后的视图结构如图所示:

加入 UIScrollView 后的视图层次结构

设置分页:

[scrollView setPagingEnabled:YES]; //分页显示

若不设置分页,如果有多个对象时,可能出现如下效果(即屏幕同时显示多个视图的一部分):

未设置分页效果

分页实现原理:
UIScrollView 对象会根据其 bounds 的尺寸将 contentSize
分割成多个尺寸相同的区域。拖动结束后,UIScrollView
实例会自动滚到并显示其中一个区域。

代码地址:
https://github.com/Ranch2014/iOSProgramming4ed/tree/master/05-RedrawingAndUIScrollView/Hypnosister

《iOS编程(第4版)》
笔记


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图