Tag: uipangesturerecognizer

使用UIPanGestureRecognizer删除UICollectionView Swift 3中的单元格

我想分享一个快速的小项目,该项目使用UIPanGestureRecognizer删除UICollectionView中的单元格。 以下是其外观示例: 假定您具有如何创建UICollectionView和自定义CollectionViewCell的基本知识。 项目文件可以位于这里: GitHub – almusto / PanToDelete 通过在GitHub上创建一个帐户为PanToDelete开发做出贡献。 github.com 当涉及到UI时,该项目非常简单。 我所做的就是创建一个UICollectionViewController,并将其嵌入到导航控制器中的自定义单元格。 设置CollectionView: 让我们快速浏览一下UICollectionView的基本设置 因为我们使用的是UICollectionViewController,所以我们不需要设置委托,因为Xcode会为我们这样做。 但是,我们确实设置了UICollectionViewDelegateFlowLayout以允许我们调整在viewDidLoad()之后的第一个函数中执行的单元格框架。 接下来的三个函数是标准的collectionView函数,我们在其中设置节数,将numberOfItemsInSection设置为grocerList.count,然后创建单元格本身。 您可能想知道功能允许我删除单元格的位置在哪里……不要担心,我稍后再讲。 设置自定义单元: 这是我们大多数代码将要使用的地方。 让我们先来看一下变量和初始化程序。 我在这里创建了一些变量。 cellLabel将存储我们的杂货项目,两个deleteButton标签将根据我们平移的方式添加到左侧或右侧的内容视图下方。 当然还有我们的平移手势识别器。 我们还向类添加了UIGestureRecognizerDelegate协议。 稍后我将解释原因。 接下来,我们有两个init方法,其中调用了我创建的自定义函数comonInit()。 对于所需的init,我仍然有些朦胧,但是据我所知,当我们创建自己的自定义类init时,我们需要使用它。 此必需的init允许我们通过NSCoder“取消存档”数据。 似乎这里发生了很多事情,但这确实很简单。 而不是在情节提要中创建这些对象,而是手动进行,因此我们必须初始化每个对象并将其添加到视图中。 让我们一次浏览一个项目。 首先,我将contentView的背景色设置为灰色,将self.background颜色设置为红色。 每个单元格都有一个contentView,它显示我们想要的单元格中的对象或颜色。 当我设置self.background颜色时,实际上是在contentView下设置颜色。 完成此操作后,我将初始化cellLabel并将其添加到contentView中。 我也将translatesAutoresizingMaskIntoConstraints设置为false,这使我可以手动设置该标签的约束。 如果我不这样做,则自动布局会尝试为我创建约束。 同样,我初始化deleteLables并将它们插入到contentView的下面。 因为我希望这些标签可以用平底锅拍摄,所以我不在这里设置边框。 相反,我在平底锅发生时设置了帧。 最后,我使用一个名为onPan的动作来初始化平移手势。 与创建UIButton时非常相似。 我还将委托设为self..self作为CustomCell类。 现在,我们的视图已初始化,让我们开始平移手势: 制作手势: 首先让我们看一下我们的onPan函数。 您会注意到我们的if语句涵盖了手势的某些不同状态。 如果状态为“开始”,则不执行任何操作;如果状态为“已更改”,则调用setNeedsLayout()。 该方法说“在下一个运行循环上调用layoutSubViews()。”当某人按下我们的单元格时,状态变为开始,然后当他们向左或向右移动该单元格时,状态变为更改并调用layoutSubViews()。 现在在layoutSubViews()中,我们通过调用translation(in:View)来检查状态是否已更改,以及状态是否改变,以获取平移的当前点,该平移返回“标识坐标系统中视图新位置的点”。然后,我们根据该点设置contentView和deleteLabels的框架。 现在回到我们的onPan函数,我们有一条else语句,它检查平移手势速度以查看其是否大于每秒500点。 在检查速度之前,您会注意到腹肌。 这是绝对值,我们这样做的原因是因为用户可以向左或向右平移,因此该值可能为负。 […]

平移手势后将视图恢复到原始位置,快捷

我有一个UIView (图像中的红色),我可以在X轴上平移。 我可以将视图恢复到原来的位置,但是我想要返回到这个位置,就好像它被一个轻的弹簧拉住,或者以某种减速的方式放松回到原来的位置。 此刻它奇怪地跳回到那个位置。 这是我的相关代码,并附上图像以显示视图的最大位置。 @IBAction func handlePan(recognizer:UIPanGestureRecognizer) { if recognizer.state == UIGestureRecognizerState.Ended { print(backgroundView.center.x) //120.0 print(backgroundView.center.y) //64.0 let xDivision = Double(backgroundView.center.x/120.0) print(xDivision) recognizer.view?.center = CGPointMake(120.0, 64.0) self.view.frame = CGRectMake(backgroundView.center.x, 0, self.view.frame.width , self.view.frame.height) UIView.animateWithDuration(xDivision, delay: 0.0, usingSpringWithDamping: 2.0, initialSpringVelocity: 2.0, options: UIViewAnimationOptions.CurveEaseIn, animations: { self.view.center.x = 120.0 }, completion: { (true) in print("Animation Complete") […]

iOS – UIPanGestureRecognizer:在animation中拖动

我使用UIPanGestureRecognizer沿用户绘制的path移动一个对象。 但是这个对象是animation,我需要在animation过程中与它交互。 可能吗? 我已经尝试使用UIViewAnimationOptionAllowUserInteraction但没有结果。

屏幕顶部边缘的UIScrollView UIPangestureRecognizer盲区

如下图所示,在屏幕顶部的“死区”内开始拖动时,UIPanGestureRecognizer不会平移。 这很可能是由通知中心造成的。 touchesMoved:withEvent:方法却被调用,所以应该有一种方法来获得在这个区域中识别的平移手势。 有没有人遇到过这个问题,那里有没有解决方法呢? 谢谢你的帮助!

Objective C – UIPanGestureRecognizerselect器不用UISlider调用

我想在UISlider上使用UIPanGestureRecognizer和UITapGestureRecognizer。 水龙头工作正常,我面临与UIPanGestureRecognizer问题。 我需要调用handleTransactionPan方法来更改UISlider的值,但不会因为它的委托方法而被调用。 我怎样才能调用select器,同时保持委托方法触发? 这是我迄今所做的代码。 – (void)viewDidLoad { [super viewDidLoad]; pr=[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleTransactionPan:)]; pr.delegate=self; [slider addGestureRecognizer:pr]; tr=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; tr.delegate=self; [slider addGestureRecognizer:tr]; } -(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { return YES; } -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if(gestureRecognizer==pr) { if ([touch.view isKindOfClass:[UISlider class]]) { return NO; } } […]

如何确定滚动UITableView的触摸次数

我试图确定- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView被称为&执行相应的任务时,在UITableView手指触摸的数量。 我迄今为止尝试的两种方法是: inheritanceUITableView覆盖touchesBegan:withEvent: – 这种方法的问题是,只有当屏幕上有一些“点击”,而不是当用户只是快速滚动而不用手指rest时,就会触发这个方法。 使用uipangesturerecognizer来检测触摸的次数。 – 我用以下方式使用它: UIPanGestureRecognizer *taps = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; taps.maximumNumberOfTouches=4; taps.minimumNumberOfTouches=1; [self.tableView addGestureRecognizer:taps]; 接着 -(void)handleTap:(UITapGestureRecognizer *)sender{ if (sender.state == UIGestureRecognizerStateBegan) { NSLog(@"BEGAN – %d",sender.numberOfTouches); } } 虽然我可以通过这种方法获得触摸次数,但是问题在于它正在覆盖实际的滚动(正常滚动不会发生)。 请提出我错在哪里或者应该做些什么。 谢谢!

iOS:错误的效果与“Recognizer.view.center = CGPointMake(…”

我使用locationInView设置我的bouton当用户释放它的位置。 发布之后,我给出之前存储的位置,但事实上,我的button不会返回到正确的位置。 这我的代码: – (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer{ CGPoint translation = [recognizer translationInView:self.view]; recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y); [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; static CGPoint startLocation; if (recognizer.state == UIGestureRecognizerStateBegan) { startLocation = [recognizer locationInView:self.view]; NSLog(@"Began: %d" @"-" @"%d", (int)startLocation.x , (int)startLocation.y); } if (recognizer.state == UIGestureRecognizerStateEnded) { NSLog(@"Ended Bef: %d" @"-" @"%d", (int)startLocation.x, (int)startLocation.y); […]

滚动发生时获取UIScrollView翻译?

我正试图从滚动发生时,从UIScrollView.panGestureRecognizer拦截locationInView。 我能够得到初始触摸坐标(当滚动开始时)在委托方法内实现下面的代码 #pragma mark UIScrollViewDelegate – (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView { CGPoint point = [scrollView.panGestureRecognizer locationInView:scrollView]; NSLog(@"%@", NSStringFromCGPoint(point));} 有没有办法获得坐标不断滚动发生? 我明白了scrollView.panGestureRecognizer是UIScrollView对象的UIPanGestureRecognizer @property,所​​以在某处应该有一个panGestureDetected @selector。 Thx提前…. e

手势冲突UITableView滑动删除iOS

我的手势识别器有问题。 我的目标是实施使用滑动删除在我的表格视图。 但我认为其他手势是相互冲突的。 我正在使用这个libray romaonthego / REFrostedViewController这个库为我的汉堡包菜单,这个库有一个pangesturefunction。 我认为冲突是在手势中。 因为当我运行我的tableview在另一个项目中的代码它正在工作。请帮助,预先感谢您。

只捕获UIView 2手指UIPanGestureRecognizer

我在我的视图控制器中有几个UIScrollView 。 我想叠加一个视图,通过UIPanGestureRecognizer捕获2手指轻扫,这将不loggingUIScrollView轻扫手势。 当我用两指手势在我的内容上放置一个透明的视图时,我的水龙头和一个手指轻扫没有被检测到。 我试图覆盖pointInside:方法返回NO但它不logging我的2指滑动。 效果类似于4个手指轻扫来改变应用程序。