相关疑难解决方法(0)

如何忽略触摸事件并将它们传递给另一个子视图的UIControl对象?

我有一个自定义的UIViewController,其UIView占据了屏幕的一角,但大部分都是透明的,除了它的部分有一些按钮和东西.由于该视图上对象的布局,视图的框架可以覆盖其下方的一些按钮.如果他们没有触及任何重要的东西,我希望能够忽略该视图上的任何触摸,但我似乎只能传递实际的触摸事件(touchesEnded/nextResponder的东西).如果我有一个UIButton或类似的东西没有使用touchesEnded,我如何将触摸事件传递给它?

我不能手动找出要调用的按钮选择器,因为这个自定义ViewController可用于许多不同的视图.我基本上需要一种方法来调用它:

[self.nextResponder touchesEnded:touches withEvent:event];

在UIControl类型上也是如此.

cocoa-touch uikit uiresponder ios

64
推荐指数
4
解决办法
6万
查看次数

UIScrollView向子视图发送触摸

注意:我已经阅读了一些关于UIScrollView子视图发送方式的问题(包括这个问题,虽然我已经投了票,但它不再符合我的预期).

我有什么:我有一个UIScrollView自定义UIView(让我们称之为A)里面覆盖整个UIScrollView.我也被允许UIViewsA中放入其他自定义.

在我这样做的代码上:

[scrollView setDelaysContentTouches:YES];
scrollView.canCancelContentTouches = NO;
Run Code Online (Sandbox Code Playgroud)

发生了什么:目前我的唯一问题是,如果我想在A中移动子视图,我必须触摸它,等待,然后移动它.正如这里所述:

现在,行为会根据UIView上第一次触摸的"时间长度"而变化.如果它很短,则管理相对拖动,因为它是UIScrollView的滚动.如果它很长,那么我将在我的UIView中获得touchesMoved:事件.

我想要的是:A中的子视图应始终优先,我不应该触摸和等待.如果我触摸A而不是它的子视图,我希望UIScrollView接收触摸,如平移和移动(contentSize比大于frame).


编辑1.0

我在通用内部使用此A视图的唯一原因UIScrollView是因为我希望能够放大/缩小A视图.所以我正在做以下事情:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return customView; // this is the A view
}
Run Code Online (Sandbox Code Playgroud)

一开始我没有内部的A视图UIScrollView,我唯一做的就是添加A作为我的UIViewController's根视图的子视图,一切顺利.如果有另一种方法可以放大/缩小,我很乐意接受答案.

iphone uiscrollview uiview ipad ios

9
推荐指数
1
解决办法
8122
查看次数

将滑动触摸从UIView传递到底层UIScrollView以进行正确滚动

我的情况类似于这两个帖子(1907297689684)并且最简洁地描述我的情况,我提出了这个文本/图形布局(类似于你在IB中看到的,用于强制缩进级别的点)

UIView(MainView:320x460)
..UIScrollView(ScrollView:320x460)
..UIView(OverlayView:320x40)
....UIButton(ArbitraryButton1)
....UILabel(ArbitraryLabel1)
....UILabel(ArbitraryLabel2)

这里的目标是让OverlayView作为一个统一的透明容器来定位和显示ScrollView顶部的一些任意按钮/标签.这些按钮/标签应保持静止,而下方ScrollView中的内容随用户滑动一起移动.按钮/标签有时可以一致地隐藏/取消隐藏/缩放(使用动画),这使得将它们全部分组到单个OverlayView中变得非常方便.

麻烦的是,虽然OverlayView上的点击似乎很好地传递到底层的ScrollView,但是滑动动作没有任何效果.我可以通过覆盖来检测/拦截滑动

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)

OverlayView中的方法,但是我还没有找到一种方法将它们正确地传递给ScrollView,使其滚动.显然,touchesMoved方法不是UIScrollView用来检测/解释滑动的方法吗?

我研究过的所有其他类似帖子都找到了一个不同的解决方案,在我的情况下不起作用或者刚刚解决.我也看到过提到使用touchesShouldBegin/touchesShouldCancel虽然我不知道如何实现.无论如何,仍然希望社区有一些洞察力可以让我为此提出一个优雅的解决方案 - 任何示例代码都会很棒.

在此先感谢,乔尔.

PS - 我还应该提一下,我需要让它与iOS 3.0兼容,所以我认为尝试使用UIGestureRecognizers已经出局了.

overriding uiscrollview uiview swipe touchesmoved

6
推荐指数
1
解决办法
2436
查看次数