- 浏览: 663104 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lizaochengwen:
网络请求碰到的中文乱码使用encodeURL吧- (NSStr ...
iPhone开发/iPad开发 中文乱码问题 -
hhb19900618:
还是没弄懂怎么解决了中文乱码? 正确代码能重写贴出吗
iPhone开发/iPad开发 中文乱码问题 -
zhengjj_2009:
我的理解是讲ipa文件解压缩之后再重新打包,已经破坏了签名,所 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
zhengjj_2009:
我参考你的“ 从ipa格式的母包生成其它渠道包的shell脚本 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
同一片天空:
问题果然解决了
iOS 搭建 XMPP实现环境
« ios实现国际话
UITableView实现删除移动编辑的样式 »
UIScrollView的作用原理,实现scrollView中touch事件作用子视图
我们知道当多个视图进行叠加的时候,touch事件是作用到最上面的视图上,但是如果父视图是UIScrollView,如果默认,可能touch子视图会造成UIScrollView的滚动。
UIScrollView滚动的原因,可以看UIScrollView 原理。
我在这里简单的描述一下,UIScrollView的工作原理,当手指touch的时候,UIScrollView会拦截Event,会等待一段时间,在这段时间内,如果没有手指没有移动,当时间结束时,UIScrollView会发送tracking events到子视图上。在时间结束前,手指发生了移动,那么UIScrollView就会进行移动,从而取笑发送tracking。
那么,UIScrollView的子类想要接受touch事件,就是用户点击UIScrollView上的视图时,要先处理视图上的touch,而不发生滚动。这时候就需要UIScrollView的子类重载touchesShouldBegin:withEvent:inContentView: ,从而决定自己是否接受子视图中的touch事件。
上面都是理论的知识,下面看一个简单的例子:
外面红色是一个UIScrollView,黄色是在UIScrollView上添加的UIView。最后的效果是,当在黄色区域内touch时,touch事件会作用到UIView上,当touch红色区域时,整个视图上下滚动。下面是实现的过程。
一、创建工程,然后创建myScrollView,并且myScrollView继承自UIScrollView。
#import <UIKit/UIKit.h>
@interface myScrollView : UIScrollView {
}
@end
具体的实现:
#import "myScrollView.h"
#import "MyView.h"
@implementation myScrollView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setBackgroundColor:[UIColor redColor]];
MyView *myView=[[MyView alloc] initWithFrame:CGRectMake(1, 3, 100, 200)];
[self addSubview:myView];
[myView release];
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
NSLog(@"用户点击了scroll上的视图%@,是否开始滚动scroll",view);
//返回yes 是不滚动 scroll 返回no 是滚动scroll
return YES;
}
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
NSLog(@"用户点击的视图 %@",view);
//NO scroll不可以滚动 YES scroll可以滚动
return NO;
}
@end
重写了- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view方法和- (BOOL)touchesShouldCancelInContentView:(UIView *)view方法。
其中(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view,是用户点击黄色区域内,先触发这个方法,当返回YES时,touch事件作用到黄色视图上,当返回no时,红色可以上下滚动。
(BOOL)touchesShouldCancelInContentView:(UIView *)view是发送tracking前,先作用这个方法。
下面是点击黄的区域的日志:
2011-06-02 10:19:42.469 scrollTouch[38255:207] 用户点击了scroll上的视图<MyView: 0x4e26f90; frame = (1 3; 100 200); layer = <CALayer: 0x4e270a0>>,是否开始滚动scroll
2011-06-02 10:19:42.658 scrollTouch[38255:207] 用户点击的视图 <MyView: 0x4e26f90; frame = (1 3; 100 200); layer = <CALayer: 0x4e270a0>>
二、添加mySrollView到根视图上:
- (void)viewDidLoad
{
[super viewDidLoad];
myScrollView *view=[[myScrollView alloc] initWithFrame:CGRectMake(10, 9, 300, 400)];
[view setUserInteractionEnabled:YES];
[view setScrollEnabled:YES];
//NO 发送滚动的通知 但是就算手指移动 scroll也不会动了 YES 发送通知 scroo可以移动
[view setCanCancelContentTouches:YES];
[view setBounces:NO];
// NO 立即通知touchesShouldBegin:withEvent:inContentView 看是否滚动 scroll
[view setDelaysContentTouches:NO];
[view setContentSize:CGSizeMake(300, 900)];
[self.view addSubview:view];
[view release];
}
三、MyView视图的实现。
#import "MyView.h"
@implementation MyView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setBackgroundColor:[UIColor yellowColor]];
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
@end
UITableView实现删除移动编辑的样式 »
UIScrollView的作用原理,实现scrollView中touch事件作用子视图
我们知道当多个视图进行叠加的时候,touch事件是作用到最上面的视图上,但是如果父视图是UIScrollView,如果默认,可能touch子视图会造成UIScrollView的滚动。
UIScrollView滚动的原因,可以看UIScrollView 原理。
我在这里简单的描述一下,UIScrollView的工作原理,当手指touch的时候,UIScrollView会拦截Event,会等待一段时间,在这段时间内,如果没有手指没有移动,当时间结束时,UIScrollView会发送tracking events到子视图上。在时间结束前,手指发生了移动,那么UIScrollView就会进行移动,从而取笑发送tracking。
那么,UIScrollView的子类想要接受touch事件,就是用户点击UIScrollView上的视图时,要先处理视图上的touch,而不发生滚动。这时候就需要UIScrollView的子类重载touchesShouldBegin:withEvent:inContentView: ,从而决定自己是否接受子视图中的touch事件。
上面都是理论的知识,下面看一个简单的例子:
外面红色是一个UIScrollView,黄色是在UIScrollView上添加的UIView。最后的效果是,当在黄色区域内touch时,touch事件会作用到UIView上,当touch红色区域时,整个视图上下滚动。下面是实现的过程。
一、创建工程,然后创建myScrollView,并且myScrollView继承自UIScrollView。
#import <UIKit/UIKit.h>
@interface myScrollView : UIScrollView {
}
@end
具体的实现:
#import "myScrollView.h"
#import "MyView.h"
@implementation myScrollView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setBackgroundColor:[UIColor redColor]];
MyView *myView=[[MyView alloc] initWithFrame:CGRectMake(1, 3, 100, 200)];
[self addSubview:myView];
[myView release];
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
NSLog(@"用户点击了scroll上的视图%@,是否开始滚动scroll",view);
//返回yes 是不滚动 scroll 返回no 是滚动scroll
return YES;
}
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
NSLog(@"用户点击的视图 %@",view);
//NO scroll不可以滚动 YES scroll可以滚动
return NO;
}
@end
重写了- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view方法和- (BOOL)touchesShouldCancelInContentView:(UIView *)view方法。
其中(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view,是用户点击黄色区域内,先触发这个方法,当返回YES时,touch事件作用到黄色视图上,当返回no时,红色可以上下滚动。
(BOOL)touchesShouldCancelInContentView:(UIView *)view是发送tracking前,先作用这个方法。
下面是点击黄的区域的日志:
2011-06-02 10:19:42.469 scrollTouch[38255:207] 用户点击了scroll上的视图<MyView: 0x4e26f90; frame = (1 3; 100 200); layer = <CALayer: 0x4e270a0>>,是否开始滚动scroll
2011-06-02 10:19:42.658 scrollTouch[38255:207] 用户点击的视图 <MyView: 0x4e26f90; frame = (1 3; 100 200); layer = <CALayer: 0x4e270a0>>
二、添加mySrollView到根视图上:
- (void)viewDidLoad
{
[super viewDidLoad];
myScrollView *view=[[myScrollView alloc] initWithFrame:CGRectMake(10, 9, 300, 400)];
[view setUserInteractionEnabled:YES];
[view setScrollEnabled:YES];
//NO 发送滚动的通知 但是就算手指移动 scroll也不会动了 YES 发送通知 scroo可以移动
[view setCanCancelContentTouches:YES];
[view setBounces:NO];
// NO 立即通知touchesShouldBegin:withEvent:inContentView 看是否滚动 scroll
[view setDelaysContentTouches:NO];
[view setContentSize:CGSizeMake(300, 900)];
[self.view addSubview:view];
[view release];
}
三、MyView视图的实现。
#import "MyView.h"
@implementation MyView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setBackgroundColor:[UIColor yellowColor]];
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
@end
发表评论
-
SOCK_STREAM和SOCK_DGRAM
2015-07-23 20:08 1658sock_stream 是有保障的(即能保证数据正确传送到 ... -
SOCKET bind INADDR_LOOPBACK和INADDR_ANY的区别
2015-07-23 19:49 2062今天写程序时候,服务器端启动了,然后客户端总是连接不上,con ... -
htons()
2015-07-23 19:26 589在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺 ... -
使用symbolicatecrash分析crash文件
2015-03-10 11:32 1189原文 http://www.cnblogs.com/ning ... -
程序设计中的计算复用(Computational Reuse)
2015-02-10 10:18 673从斐波那契数列说起 ... -
didReceiveMemoryWarning
2015-02-09 16:11 548IPhone下每个app可用的内存是被限制的,如果一个app使 ... -
iOS开发中怎么响应内存警告
2015-02-09 16:08 659好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在 ... -
ASIHTTPRequest多次重复请求的问题
2014-12-17 14:34 648在一个车票订购的项目中,点击一次订购,却生成了2次订单,通过抓 ... -
从 CloudKit 看 BaaS 服务的趋势
2014-09-26 11:51 731从 6 月份 WWDC 苹果发布 ... -
ios编程--AVCapture编程理解
2014-09-26 11:03 9480、媒体采集的几个东西。这里所需要明白的是,在这个流程中,这里 ... -
NSURLProtocol
2014-09-25 10:42 8281、http://nshipster.com/nsurlpro ... -
关于iOS8的extension插件
2014-09-25 10:41 1303关于iOS8的extension插件,有兴趣的同学可以参考一下 ... -
【转】ios app在itunesConnect里面的几种状态
2014-08-05 10:34 1155Waiting for Upload (Yellow) Ap ... -
[转]iOS Dev (45) iOS图标与切片处理工具Prepo
2014-02-07 17:02 1037iOS Dev (45) iOS图标与切片处理工具Prepo ... -
phoneGap开发IOS,JS调用IOS方法/phoneGap插件开发
2014-01-13 17:49 1249前沿 废话不说phoneGap是什么不多介绍,官方网站: h ... -
如何在IOS平台下搭建PhoneGap开发环境(PhoneGap2.5)
2014-01-13 15:23 755由于在下最近在做基于HTML5的跨平台移植,搭建环境的时候着实 ... -
xcode 4 制作静态库详解
2013-12-20 18:27 551最近在做Apple的IOS开发,有开发静态库的需求,本身IOS ... -
【翻译】ios教程-创建静态库
2013-12-20 18:19 3126作者:shede333 主页:htt ... -
封装自己的控件库:iPhone静态库的应用
2013-12-20 17:03 597由于iPhone 控件的极度匮乏和自定义组件在重用上的限制,在 ... -
iphone:使用NSFileManager取得目录下所有文件(遍历所有文件)
2013-11-18 17:56 878From:http://note.sdo.com/u/xiao ...
相关推荐
`UIScrollView` 是一个容器控件,它可以包含多个子视图,并且这些子视图的总尺寸可以远远超过 `UIScrollView` 自身的大小。通过设置 `contentSize` 属性,我们可以指定视图内容的总尺寸,从而实现滚动功能。例如,...
5. **使用`hitTest:withEvent:`方法**:覆盖UIView的`hitTest:withEvent:`方法,自定义触摸事件的处理逻辑,可以精确控制哪些子视图能响应触摸事件。 在Go语言中,虽然没有原生的UIKit库支持这些功能,但可以通过...
UIScrollView是一个可以容纳多个子视图并支持滚动的视图,而UICollectionView则更为强大,尤其适合显示网格布局或连续滚动的内容。在这个例子中,开发者可能使用了UIImageView作为每个图片的视图,并将它们添加到...
在我们的选关界面中,每个关卡卡片可以被视为UIScrollView内的一个子视图,而整个选关界面就是由这些子视图组成的。 接着,UIPageControl通常被用作与UIScrollView一起使用的辅助视图,它提供了简单的分页指示器,...
在iOS开发中,有时我们需要在一个ScrollView中嵌套一个UITableView,以实现复杂的布局需求。然而,这种嵌套滑动的情况在官方文档中并不推荐,因为可能会导致用户交互的混乱,特别是当用户试图同时滑动两个可滚动视图...
在上下切换视图的实现中,我们可以利用UIScrollView的这一特性,将多个子视图添加到ScrollView中,通过设置contentSize来确定可滚动的总范围。 2. **Auto Layout**:为了使视图在不同尺寸的设备上都能正确显示,...
在这个例子中,我们创建了一个宽度为两倍屏幕宽度的滚动视图,并添加了一个子视图。由于子视图的宽度等于屏幕宽度,用户可以通过左右滑动来查看超出屏幕的部分。 至于压缩包内的"FrameworkModel-two",这可能是项目...
而在Android中,我们通常会使用ScrollView或NestedScrollView,它们都可以承载多个子视图并支持垂直或水平滚动。 在iOS中,UIScrollView是处理用户滑动的主要组件。通过设置其contentSize属性,我们可以定义可滚动...
配置UIScrollView需要设置contentSize,添加子视图,并可能需要调整contentInset和contentOffset。例如: ```swift let scrollView = UIScrollView() scrollView.contentSize = CGSize(width: view.bounds.width ...
这涉及到创建一个新的UIScrollView实例,并为渲染模块提供子层。这个过程可以通过调用堆栈的分析看出,涉及到了多个方法调用,包括`-[UIScrollView initWithFrame:]`、`-[UIWebOverflowScrollView initWithLayer:...
滚动视图(ScrollView)Scroll Grid Controller 滚动视图--Infinite GridView 滚动视图类--CoverFlow 滚动视图类-Lazy ScrollView 滚动视图类--Parallax ScrollView 滚动视图类--Parallax View 滚动视图类-简单的...
创建UIScrollView时,我们可以设置contentSize、contentOffset和子视图: ```swift let scrollView = UIScrollView().frame(CGRect(x: 0, y: 100, width: view.bounds.width, height: 200)) .contentSize(CGSize...
//把自身从父视图中移除 //[_loginControl removeFromSuperview]; //设置数组容量为0,可变数组随便设置只是个初始化的值 _diJiArr=[[NSMutableArray alloc]initWithCapacity:0]; // CGAffineTransform a = ...