UIScrollView上的控件处理touch事件

http://blog.csdn.net/ztp800201/article/details/7973036

http://blog.sina.com.cn/s/blog_7daf0a5f0100ttw7.html

pagingEnabled
当值是YES,会自动滚动到subview的边界,默认是NO


scrollEnabled
决定是否可以滚动

delaysContentTouches

是个布尔值,当值是YES的时候,用户触碰开始,scroll view要延迟一会,看看是否用户有意图滚动,假如滚动了,那么捕捉touch-down事件,否则就不捕捉, 假如值是NO,当用户触碰, scroll view会立即触发touchesShouldBegin:withEvent:inContentView:, 默认是YES

canCancelContentTouches
当值是YES的时候,用户触碰后,然后在一定时间内没有移动,scrollView发送tracking events,然后用户移动手指足够长度触发滚动事件,这个时候,scrollView发送了touchesCancelled:withEvent: 到subview,然后scroView开始滚动
假如值是NO,scrollView发送tracking events后,就算用户移动手指,scrollView也不会滚动

UIScrollView本身无法处理touch事件:
要想实现,必须对UIScrollView上的subView做touch处理
原理十分简单,好比要响应scrollView上的UIImageView,那么请创建一个UIImageVIew的子类,由这个自定义的UIImageView来处理touch事件
头文件声明如下,供参考:
#import <Foundation/Foundation.h>
@interface ImageTouchView : UIImageView {
}
@end
这个是头文件,源文件可以是这个这样子

@implementation ImageTouchView
-(id)initWithFrame:(CGRect)frame
{
        if (self == [super initWithFrame:frame]) 
        {
                [self setUserInteractionEnabled:YES];
        }
        return  self;
}
- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
        return YES;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch*touch=[[event allTouches]anyObject];
    int touchTag=touch.view.tag;
    if (touchTag==1) {
        MainNewsViewController *mainNewsViewController=[[MainNewsViewController alloc] init];
        [appDelegate.specialNewsViewController presentModalViewController:mainNewsViewController animated:YES];  
    }
    NSLog(@"%s",__FUNCTION__)
}



如果想让UIScrollView响应touch事件就需要重构UIScrollView。
以下是我写的代码,以供大家参考
#import <UIKit/UIKit.h>
@interface MyScrollView : UIScrollView {
}
@end
.m文件实现
#import "MyScrollView.h"
@implementation MyScrollView

- (id)initWithFrame:(CGRect)frame 
{
    if (self = [super initWithFrame:frame])
{
        // Initialization code
self.backgroundColor = 
    }
    return self;
}
- (void)dealloc {
    [super dealloc];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if(!self.dragging)
{
[[self nextResponder] touchesBegan:touches withEvent:event];
}
[super touchesBegan:touches withEvent:event];
//NSLog(@"MyScrollView touch Began");
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if(!self.dragging)
{
[[self nextResponder] touchesEnded:touches withEvent:event];
}
[super touchesEnded:touches withEvent:event];
}
@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值