所以我在iOS 7应用程序中构建了一个导航控制器.titleView是可见的,以及它自己的后退按钮和导航栏.出于某种原因,交互式弹出手势(从左边缘轻扫)不起作用.什么都没发生.当我记录手势时,它不是零.为了启用此功能,我有什么特别的事吗?什么可能导致它不起作用?
我正在尝试识别左/右滑动手势UIScrollView
.我试图创建UISwipeGestureRecognizers
并将它们与滚动视图相关联.它的工作原理很少见.大部分时间我都没有被召唤.为什么?
如何可靠地左/右滑动工作?我可以使用手势识别器,还是我必须以某种方式处理它touchesBegan/Ended
谢谢
我UIView
在屏幕上添加了几个对象(例如5个),一个在另一个内部.这一点,例如,view5.superview = view4
,view4.superview = view3
,view3.superview=view2
,view2.superview = view1
.对于所有这些UIView
我设置了uitapgesturerecognizer; 对于view1-4我只是在回调中执行NSLog(@"tap%@",self),而对于view5,我设置以下内容:从层次结构中删除view4,然后将相同的对象view4'放在层次结构的同一位置.该对象还包含为其UITapGestureRecognizer
设置的view5' (实际上,我用类似的一个替换标记的一部分).
然后我开始点击view5.有些时候view5继续捕捉它的点击,一切都没问题,但随后的点击随机数(每次这个数字不同),其中一个view1-4对象开始捕捉这个点击,虽然我们仍然点击view5.整个问题具有随机特征 - 有时它发生在第10次发射,有时发生在第二次.有时错误的物体会在第一次敲击时开始捕捉水龙头.当一切都出错时,我也永远不知道哪个物体会碰到水龙头.用于视图的帧(n + 1)被设置为例如帧视图(n)的一半,而用于view1的帧 - 例如(0,0 320,460).
上面描述的ui对象的所有操作都是在主线程中进行的,而我所讲述的所有内容都完全适用于iOS 4.3 - 6.1,并且有更复杂的例子.但是iOS7让它变成了一种随意的地狱.
更新: 我已经创建了一个示例项目,以简化调试过程.无需添加/删除子视图操作.屏幕上只有4个视图,点按应用程序会记录所点击的视图.因此,您需要点击最小的视图(4).如果你在日志中看到"点按4点击4点击4 ..." - 这就是一切正常,再次停止并再次运行,再次停止并再次运行等情况.在某些运行中(可能在10之后) +成功运行)你不会在第一行看到"点击4",你会看到"点击1"或"点击2"或"点击3",它将继续如此 - 这些都是坏情况.
示例项目可以从这里下载:http://tech.octopod.com/test/BuggySample.zip(归档中只有33 Kb).
更新2
我们已经向Apple发布了一个错误,我会在这里发布一些反馈意见.但是,任何好的解决方法都将非常感谢!
更新3
由Yuvrajsinh提供的解决方案真正致力于示例项目.不幸的是,它仍然没有帮助解决最初出现的主项目中出现的问题.现在的主要原因是,如果没有自我手势的任何视图都放在可点击内容上,则其下的随机视图元素开始捕捉交互(而不是具有交互手势集的顶部交互.你有任何想法如何解决它?更新的样本可以从这里下载:http://tech.octopod.com/test/BuggySample2.zip
我希望在iOS7中获得类似于Messages app(在大多数短信应用程序中也很常见)的行为,在对话视图中,从屏幕左边缘向右滑动将表现得像UINavigationController中的后退按钮.
我已设法实现此行为,但是,如果键盘在显示视图中打开,当我开始向后滑动时,键盘会卡住,并且在我移动手指时不会使视图向右移动.我想将键盘和呈现视图设置为一个单元,而不是将键盘放在其他视图的顶部,并且它们在它后面动画,这就是我现在得到的(参见第二个屏幕截图):
(更新:请注意,在主视图动画完成后,键盘最终会消失;我关注的是在滑动过程中键盘的位置,以及当您持续触摸设备的一半时,不在与实际视图同步.第二个屏幕截图阐明了这种期望的行为.我也想知道它为什么不是默认行为.)
只需在Xcode 5.0.2中创建一个新的主 - 细节iPhone应用程序,并在StoryBoard中的详细视图(最好是上半部分的某个地方)添加一个文本字段,运行应用程序,添加项目,就可以轻松复制问题. ,点击它以转到详细视图并单击您添加的文本字段.从设备左侧边缘滑动,同时将手指放在上面,您将看到问题.
期望的行为:
目前的行为:
假设我有两个视图,A和B.我希望能够在触摸视图A时触发'dragAndDropStart'事件,然后启用从A到B的拖放...在整个过程中向用户显示反馈(即显示在视图A和用户手指之间出现的一条线).在下降(释放拖动手势)时,我想触发另一个'dragAndDropEnd'事件,这次是在视图B上.
touchStart和touchEnd处理程序太有限了,因为它们似乎不允许将手势从一个View切换到另一个View.它们似乎也没有启用中间"拖动"状态.
关于使用手势处理程序的React原生文档有点神秘,我还没有看到任何证明它们使用的示例.
有任何想法吗?
我正在尝试创建和改进现有的SlidingDrawers项目,这些项目可以适用于屏幕的所有四个边{LEFT,RIGHT,TOP,BOTTOM}.有一些库,但它们都有局限性,复杂性和错误.其中一个比较常见的是umano的AndroidSlidingUpPanel,但是,我不喜欢这个库,因为你只需要包含两个子布局,并且还需要注意主要内容的具体安排.其他库类似,或更复杂,或有bug.
我接近完成我的SlidingDrawers版本,我专注于BOTTOM引力.我需要一些帮助.单击抽屉将打开并关闭它.您也可以用手指滑动抽屉.但是,如果你扔掉抽屉,整个视图将会移动到比它应该更低或更低的位置.
我该如何解决这个问题?据我所知,我的数学是正确的.我传给动画师的翻译价值应该是正确的.以下是我完成的工作.请查看此项目https://github.com/drxeno02/CustomDrawerLayout.git.先感谢您.
对于那些想要查看有问题的代码看起来的片段的人来说,这就是我目前正在做的手势.
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mActivePointerId = MotionEventCompat.getPointerId(event, 0);
switch (mStickTo) {
case GRAVITY_BOTTOM:
case GRAVITY_TOP:
mInitialCoordinate = event.getY();
break;
case GRAVITY_LEFT:
case GRAVITY_RIGHT:
mInitialCoordinate = event.getX();
break;
}
break;
case MotionEvent.ACTION_MOVE:
float coordinate = 0;
switch (mStickTo) {
case GRAVITY_BOTTOM:
case GRAVITY_TOP:
coordinate = event.getY();
break;
case GRAVITY_LEFT:
case GRAVITY_RIGHT:
coordinate = event.getX();
break;
}
final int diff = (int) Math.abs(coordinate - mInitialCoordinate);
// confirm that difference …
Run Code Online (Sandbox Code Playgroud) 我试图抓住一个手势,但它不起作用.这是我的代码:
UISwipeGestureRecognizer *recognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft)];
[[self view] addGestureRecognizer:recognizer];
[recognizer release];
Run Code Online (Sandbox Code Playgroud)
和
-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
NSLog(@"get gesture");
if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
NSLog(@"get gesture right");
}
if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"get gesture Left");
}
}
Run Code Online (Sandbox Code Playgroud)
它总是得到一个手势,但不认识方向.我也试过if(recognizer.direction){NSLog(@"get gesture");}
,它也有效,所以我不明白我犯了哪个错误.
谢谢你的帮助.
我有一张位于SD卡中的视频列表.此时,我只需要帮助为列表视图中的每一行创建手势或滑动检测.感谢stackoverflow上的这个问题在网格布局上进行Fling手势检测,我在listview上实现了手势.现在,它可以轻松检测用户何时向右或向左滑动.但这个手势适用于整个列表视图.我只想知道如何为各行实现此滑动检测.例如,应用程序现在可以打印"右扫动","向左滑动".我只是想让它像"在第1行右侧滑动","在第3行左侧滑动"等等.我希望我的问题很明确.
期待一些有用的回复.谢谢
我正在与 Mosh 一起学习 React Native 课程(https://codewithmosh.com/)。我正在使用世博会。我对本机反应非常陌生,并不真正知道我在做什么,但我知道我的代码应该可以工作。我根据他的代码仔细检查了我的代码,甚至将我的项目复制到朋友的 mac 上,看看代码是否可以在 ios 上运行(因为 mosh 正在 ios 模拟器上运行他的代码)。在ios模拟器上,我的代码运行完美,但在android上,没有任何反应。
这是我实现可滑动本身的地方:
import React from 'react';
import { StyleSheet, View, Image, TouchableHighlight } from 'react-native';
import Swipeable from 'react-native-gesture-handler/Swipeable';
import AppText from './AppText';
import colors from '../config/colors';
function ListItem({title, subtitle, image, onPress, renderRightActions}) {
return (
<Swipeable renderRightActions={renderRightActions} >
<TouchableHighlight underlayColor={colors.light} onPress={onPress} >
<View style={styles.container} >
<Image style={styles.image} source={image} />
<View>
<AppText style={styles.title} >{title}</AppText>
<AppText style={styles.subTitle}>{subtitle}</AppText>
</View>
</View>
</TouchableHighlight>
</Swipeable>
);
}
Run Code Online (Sandbox Code Playgroud)
然后我将其导出到另一个屏幕:
function MessagesScreen(props) …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个带有手势系统的应用程序,基本上如果我将iPhone转向左,我的应用程序将执行一项功能,如果我将iPhone转为右,其他功能,与其他人的手势.
我不知道如何使用它,我正在尝试搜索谷歌但不工作,结果只是触摸手势而不是动作手势.
有人有一个教程来帮助我吗?
gesture ×10
ios ×5
android ×3
ios7 ×3
iphone ×3
react-native ×2
swipe ×2
xcode ×2
cocoa-touch ×1
drawerlayout ×1
expo ×1
javascript ×1
keyboard ×1
listview ×1
objective-c ×1
swift ×1
uiscrollview ×1