我在主UIView中添加了一个子视图(称为panel),我添加了gestureRecognizer,因为我希望它只能为Y轴拖动,并且仅限于某些限制(即160,300,超过300,它不能去).
我用这种方式实现了手势处理
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(self.view.frame.size.width/2, recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view.superview];
//now limit the drag to some coordinates
if (y == 300 || y == 190){
no more drag
}
}
Run Code Online (Sandbox Code Playgroud)
但现在我不知道如何将阻力限制在那些坐标上.
它不是一个巨大的视图,它只是一个包含工具栏和按钮的小视图.
如何将拖动限制为坐标?(x = 160(中间屏幕),y = 404)< - 示例
中心应该在那里?
我google了很多,但我找不到具体的答案.
提前致谢
我有类似的问题,如下面的链接
但是,这个链接也没有解决我的问题.我正在为同一个UIImage使用平移,捏合和旋转手势.当我旋转该图像并执行平移时,它将进行随机平移(有时它会在平移的相反方向上进行.我还将锚点设置为(0.5,0.5)).但是,如果我只使用平移(即旋转前),它将表现良好.我该如何解决这个问题?
我有一个UIImageView可通过平移手势移动的东西.
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.photoMask addGestureRecognizer:pan];
Run Code Online (Sandbox Code Playgroud)
我想限制可以在屏幕上移动的区域.而不是用户能够将视图直接拖动到屏幕的一侧,我想限制它的某种边距.我怎样才能做到这一点?
另外,旋转后如何处理?
编辑---
#pragma mark - Gesture Recognizer
-(void)handlePan:(UIPanGestureRecognizer *)gesture {
NSLog(@"Pan Gesture");
gesture.view.center = [gesture locationInView:self.view];
}
Run Code Online (Sandbox Code Playgroud)
这是我目前处理平底锅的方法.我需要做的是继续按中心点移动图像视图,并在靠近屏幕边缘时将其移动限制为50.
在我的UITableViewCell子类中,我添加了一个平移手势,并且在gestureRecognizerShouldBegin我检查的方法中self.frame.origin.x,self.frame.origin.y两者都是0.000000 and 0.000000在应用后TranslationInView CGPoint translation = [gestureRecognizer translationInView:[self superview]];我得到了x=-4.000000 and y=0.000000
TranslationInView当我得到正确的单元格0.0和0.0的位置,因为第一个单元格将具有0.0和0.0,为什么我需要时,如何工作,我试图绕过它TranslationInView.
我的设置
我正在尝试复制Google Now的卡界面.
我有一个UIView(内部)a的子视图UIScrollView.两者都是相同的UIViewController.该UIView有一个UIPanGestureRecognizer被连接到它UIViewController.
将UIScrollView用于向上和向下滚动.该UIPanGestureRecognizer用于滑开UIView.
问题
当我触摸UIView(卡片)时我无法滚动
问题
如何实现在卡UIGestureRecognizerDelegate上启用gestureRecognizer(_:shouldRecognizeSimultaneouslyWithGestureRecognizer:)以便它可以UIScrollView滚动?
我花了几个小时试图解决这个问题,我非常感谢你的帮助.
问题很简单,如何在tvOS中的UIScrollView中启用滚动和缩放?
我从iOS尝试了相同的初始化代码,并返回了focusedView var 的scrollview,但是当我触摸遥控器时没有任何反应.
此外,我试图将另一个自定义UIPanGestureRecognizer添加到scrollview,实际上它工作,但我不想用自定义代码处理平移,只是使用像iOS一样的平移行为.
让我知道,谢谢.
uiscrollview uiscrollviewdelegate uipangesturerecognizer uipinchgesturerecognizer tvos
是否可以将图像从collectionViewCell拖动到UIView中?
我正在创建一个游戏,用户可以在下一个VC中选择一些项目.我将每个项目表示为图像,用户可以通过将图像拖动到屏幕底部来选择每个项目.然后将图像重置为其原始位置.
如果我在我的代码中有UICollectionView函数,在UIViewCollectionView类中选择的图像都正确设置...我需要包括什么来将图像从上半部分(在CollectionView内)移动到下半部分(在UIView内) .
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let Cell:BackpackCollectionVC = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! BackpackCollectionVC
Cell.backpackImage.image = UIImage(named: self.resultString[indexPath.row]["imageName"]!)!
return Cell
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.items.count
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
Run Code Online (Sandbox Code Playgroud)
我可以使用下面的代码在UIView中移动图像.我无法弄清楚如何在UIViewCollectionView中实现它...
在ViewDidLoad中:
let imageGesture = UIPanGestureRecognizer(target: self, action: #selector(self.imageInUIViewDragged(gestureRecognizer:)))
uiviewImage.isUserInteractionEnabled = true
uiviewImage.addGestureRecognizer(imageGesture)
func imageInUIViewDragged(gestureRecognizer: UIPanGestureRecognizer) {
let translation = gestureRecognizer.translation(in: view)
let uiviewImage = gestureRecognizer.view!
//self.view.bounds.width - …Run Code Online (Sandbox Code Playgroud) 当我在iPhone或iPad上为每个允许的设备方向拖动它时,我想要一个球来跟踪我的手指.当旋转设备时,视图似乎正确居中,但是当我拖动它时,球不会停留在圆周上并且似乎在任何地方.
编辑
Martin R的答案现在按要求显示.我唯一的额外代码更改是删除不必要的声明var shapeLayer = CAShapeLayer()
在我尝试将球和轨迹都限制在视图中心并将球的中心坐标作为偏移量添加到运行时之前,这个例子中的数学非常有意义.我遵循了有关如何约束视图的这些建议.
有三件事我不明白.
首先,从两个变量计算圆的周长trackRadius和角度theta,并使用sin和cos的theta发现x和y坐标不会把球在合适的位置.
其次,atan用于找到theta视图中心与被触摸点之间的角度,并使用trackRadiuswith theta来查找x和y坐标不会将球放置或沿圆周移动到新的位置.
第三,每当我拖动球时,调试区域中的消息都会显示Xcode is Unable to simultaneously satisfy constraints,尽管在拖动之前没有报告任何约束问题.
这里可能存在多个问题.我的大脑开始受到伤害,如果有人能够指出我做错了什么,我将不胜感激.
这是我的代码.
import UIKit
class ViewController: UIViewController {
override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return .all }
var shapeLayer = CAShapeLayer()
let track = ShapeView()
var ball = ShapeView() …Run Code Online (Sandbox Code Playgroud) 我UIScrollView在中有一个UIViewController,由segue模态显示,另外一个UIPanGestureRecognizer确实通过pan关闭了视图控制器。此手势仅在以下情况下有效
scrollView.contentOffset.y == 0
Run Code Online (Sandbox Code Playgroud)
问题是,现在两个平移手势相互冲突,我无法再滚动视图。
为了解决这个问题,我尝试使用gestureRecognizer(_: shouldRecognizeSimultaneouslyWith:)方法,返回yes,并且还尝试将自定义的平移手势添加到UIScrollView平移手势识别器中,如下所示:
scrollView.panGestureRecognizer.addTarget(self, action: #selector(handlePanGesture(_:)))
Run Code Online (Sandbox Code Playgroud)
但是这些并不能解决问题。如果您知道如何解决此问题,请多多帮助。
已编辑
这是我的平移手势的代码,可消除视图控制器:
@IBAction func handlePanGesture(_ sender: UIPanGestureRecognizer) {
let percentThreshold: CGFloat = 0.3
if scrollView.contentOffset.y == 0 {
let translation = sender.translation(in: view)
let verticalMovement = translation.y / view.bounds.height
let downwardMovement = fmaxf(Float(verticalMovement), 0.0)
let downwardMovementPercent = fminf(downwardMovement, 1.0)
let progress = CGFloat(downwardMovementPercent)
guard let interactor = interactor else {return}
switch sender.state {
case .began:
interactor.hasStarted = true
dismiss(animated: …Run Code Online (Sandbox Code Playgroud) 目标是针对同一个 SCNScene 实现两种平移手势:一个用一根手指,另一个用两根手指。
下面的这段代码不起作用。即使为手势分配了不同的选择器,单指平移功能也永远不会被调用。一指平移和两指平移都会调用sceneViewPannedTwoFingers.
从阅读其他问题来看,这似乎shouldRecognizeSimultaneouslyWithGestureRecognizer可能是答案,但这些平移并不是同时发生的。它应该是单指平底锅或双指平底锅,不能同时使用两者。
是否可以有如上所述的两个平移手势?如果是这样,正确的方法是什么?
// Handle one-finger pans
let panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(sceneViewPannedOneFinger))
sceneView.addGestureRecognizer(panRecognizer)
// Handle two-finger pans
let twoFingerPanRecognizer = UIPanGestureRecognizer(target: self, action: #selector(sceneViewPannedTwoFingers))
sceneView.addGestureRecognizer(twoFingerPanRecognizer)
func sceneViewPannedTwoFingers(sender: UIPanGestureRecognizer) {
print("two finger pan!!!")
}
func sceneViewPannedOneFinger(sender: UIPanGestureRecognizer) {
print("one finger pan!!!")
}
Run Code Online (Sandbox Code Playgroud) ios ×6
swift ×5
uiview ×4
objective-c ×3
uiscrollview ×3
autolayout ×1
ios6 ×1
orientation ×1
tvos ×1
uiimageview ×1
uistackview ×1
uitableview ×1