谁能解释一下是NSRunLoop
什么?所以我知道这NSRunLoop
是一件与之相关的事情NSThread
吗?所以假设我创建一个类似的线程
NSThread* th=[[NSThread alloc] initWithTarget:self selector:@selector(someMethod) object:nil];
[th start];
-(void) someMethod
{
NSLog(@"operation");
}
Run Code Online (Sandbox Code Playgroud)
在这个线程完成他的工作之后?为什么使用RunLoops
或在哪里使用?从Apple docs我已经阅读了一些东西,但对我来说并不清楚,所以请尽可能简单地解释
当UIButton的帧位于其父级帧之外时,UIButton(或任何其他控件)是否可以接收触摸事件?因为当我尝试这个时,我的UIButton似乎无法接收任何事件.我该如何解决这个问题?
谁知道?我找到了一些答案,但是太复杂而且太深了.我需要一个简单的答案.
我不是在问如何处理触摸事件,而是在幕后发生了什么?如果有几个嵌套的小部件,他们看到的事件是什么顺序?开发人员是否可以控制它?理想情况下,我想要一个关于这个主题的文件.
我有一个UIView('容器视图'),其中包含几个"子视图".我想在容器视图中添加一个UITapGestureRecognizer,这样当我触摸容器视图内的区域但在子视图之外时,它会被激活.
此时,触摸容器视图内的任何位置(包括子视图内部)都会激活手势识别器.
实现看起来像这样:在控制器中:
ContainerView *containerView = [[ContainerView alloc] initWithSubViews:array];
UITapGestureRecognizer *tap = [UITapGestureRecognizer alloc] initWithTarget:self action:@selector(someSelector)];
[containerView addGestureRecognizer:tap];
[self.view addSubView:containerView];
Run Code Online (Sandbox Code Playgroud)
在ContainerView.m中
-(id)initWithSubviews:(NSArray *)array {
for (subView *s in array) {
[self addSubView:s];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我认为问题出现是因为在子视图之后添加了手势识别器.如果这是真的那么解决方案将需要将initWithSubViews方法分成两个单独的方法,我宁愿避免.
谢谢
tl; dr-如何以编程方式在屏幕上的特定点执行本机触摸?
在Web视图中,HTML包含一个Iframe,因此无法访问Web视图代码和元素,也无法对JS进行打磨按摩.Web视图中的特定坐标上有一个按钮.如何以编程方式按?
我有一个子类UIView
,我已经覆盖hitTest:withEvent:
了如下:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
NSLog(@"Event = %@", event);
return self;
}
Run Code Online (Sandbox Code Playgroud)
对于视图中的每次触摸,我看到三次调用hitTest:withEvent:
.这三个电话是在修饰之前进行的.输出如下:
2011-07-01 09:20:58.553 AppName[930:207] Event = <UITouchesEvent: 0x6a08360> timestamp: 4297.16 touches: {(
)}
2011-07-01 09:20:58.553 AppName[930:207] Event = <UITouchesEvent: 0x6a08360> timestamp: 4297.16 touches: {(
)}
2011-07-01 09:20:58.554 AppName[930:207] Event = <UITouchesEvent: 0x6a08360> timestamp: 4304.54 touches: {(
)}
Run Code Online (Sandbox Code Playgroud)
根据时间戳和地址,似乎UITouchesEvent
正在使用单个对象,并且在第三次调用之前未正确设置其时间戳.任何人都可以解释为什么这样hitTest:withEvent:
被叫三次?我不是在寻找一种解决方法.我只是想了解发生了什么.
我试图touchesBegan
在父母的叠加中处理触摸事件,UIView
但也允许触摸输入传递到UIView
下面的兄弟.我预计会有一些直接的方式来处理触摸事件,然后说"现在将它发送给下一个响应者,好像这个不存在",但我能找到的所有nextResponder
方法似乎都是回馈我的叠加视图的父级.然后那个父母没有真正将它传递给那个叠加视图的下一个兄弟,所以我不确定如何做一个看似简单的任务,通常用触摸回调来获得一个真或假的返回值告诉它是否继续处理小部件层次结构.
我错过了一些明显的东西吗
什么是CALayer(如layer
UIView上的属性所示)以及我们在哪里使用这样的类?
我在UICollectionView中嵌入了一个UITableView,集合视图水平滚动,所以如果我在集合视图单元格中的一个表视图行上尝试"滑动删除",它显然只是滚动集合视图.想知道是否有一个解决方案,以便它可以检测集合视图单元格的uitableview部分上的滑动而不是滑动uicollection视图本身?UITableView仅占用集合视图单元的四分之一.我正在使用UIViewController.我也在我的集合视图中启用了分页.
uitableview uiscrollview uigesturerecognizer uicollectionview swift
我有以下UIVIew架构(x,y,宽度,高度):
- MainWindow (0,0,768,1024)
- MainView (0,0,768,80)
- containerview (500,40,120,80)
- subview (500,40,120,80)
-some buttons
Run Code Online (Sandbox Code Playgroud)
我的问题是子视图的底部位于MainView的边界之外.子视图底部的按钮没有响应.顶部的那个是响应式的,因为它们的位置也在Mainview内部.
因此,当我尝试单击子视图底部的按钮时,我实际上点击了MainWindow!子视图底部按钮的位置不在MainView内部
有没有办法让我的所有子视图都可用,即使它的一半在MainView绑定之外?
我知道我可以直接在MainWindow下创建子视图,但我不想重做我的代码.
更新 如何设计我的视图:A = MainWindow,B = MainView,C =容器视图,D =子视图,X =我要点击的位置
+----------------------------+
|A |
|+-------------------------+ |
||B | |
|| +----------+ | |
|+------------|C&D |-+ |
| |X | |
| +----------+ |
+----------------------------+
Run Code Online (Sandbox Code Playgroud)
谢谢
ios ×5
uiview ×5
iphone ×4
objective-c ×4
cocoa ×2
cocoa-touch ×2
events ×2
swift ×2
android ×1
ipad ×1
macos ×1
nsrunloop ×1
touch ×1
uibutton ×1
uiresponder ×1
uiscrollview ×1
uitableview ×1
uitouch ×1
webview ×1
xcode ×1