gpt4 book ai didi

ios - UITableViewCell 中的 UIAttachmentBehavior

转载 作者:行者123 更新时间:2023-11-29 13:02:36 25 4
gpt4 key购买 nike

我已经向我的 tableviewcell 添加了一个水平的 UIPanGestureRecognizer 来平移单元格的 subview ,就像 ios7 邮件应用程序显示删除和更多选项的方式一样,这按预期工作

- (IBAction)slideCell:(UIPanGestureRecognizer *)sender
{

CGPoint locationOfPan = [sender locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:locationOfPan];
TestCell *cell = (TestCell *)[self.tableView cellForRowAtIndexPath:indexPath];

if (sender.state == UIGestureRecognizerStateChanged) {
CGPoint translation = [sender translationInView:self.tableView];
[cell.view setCenter:CGPointMake(cell.view.center.x + translation.x, cell.view.center.y)];
[sender setTranslation:CGPointMake(0, 0) inView:self.tableView];
}
}

我还想做的是为我的每个 UITableViewCells 添加一个带有 anchor 的 UIAttachmentBehavior,这样当我水平平移 cell.view 时,我会感到一些阻力,然后当我放手时,被平移的单元格中的 View 弹回 x 轴上的原始 anchor 位置,这可能与 UIDynamics 相关吗?

我还可以将单元格的一侧设置为边界,以防止用户将包含的 View 平移到边界之外吗?

最佳答案

下面是实现此功能的代码,它仍然需要进行调整以获得正确的感觉,但一切都按预期工作

在 TestCell 的 UITableViewCell 子类中

-(void)layoutSubviews{

[super layoutSubviews];

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self];

self.attachmentBehavior = [[UIAttachmentBehavior alloc] initWithItem:self.topView attachedToAnchor:self.topView.center];
[self.attachmentBehavior setFrequency:4.5];
[self.attachmentBehavior setDamping:0.3];

UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.topView]];

//gravity direction: right
[gravityBehavior setGravityDirection:CGVectorMake(1.0, 0.0)];

UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.topView]];
[collisionBehavior addBoundaryWithIdentifier:@"rightBoundary" fromPoint:CGPointMake(320.0f, 0.0f) toPoint:CGPointMake(320.0f, self.contentView.frame.size.height)];
[self.animator addBehavior:gravityBehavior];
[self.animator addBehavior:collisionBehavior];

}

在我的 tableViewController 中

-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
CGPoint translation = [gestureRecognizer translationInView:self.view.superview];
// Check for horizontal gesture
if (fabsf(translation.x) > fabsf(translation.y)) {
return YES;
}else{
return NO;
}

}


- (IBAction)slideCell:(UIPanGestureRecognizer *)sender
{

CGPoint locationOfPan = [sender locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:locationOfPan];
TestCell *cell = (TestCell *)[self.tableView cellForRowAtIndexPath:indexPath];

if(sender.state == UIGestureRecognizerStateBegan){

[cell.attachmentBehavior setAnchorPoint:cell.topView.center];
[cell.animator addBehavior:cell.attachmentBehavior];

}

if (sender.state == UIGestureRecognizerStateChanged) {

CGPoint translation = [sender translationInView:self.tableView];
[cell.attachmentBehavior setAnchorPoint:CGPointMake(cell.topView.center.x + translation.x, cell.topView.center.y)];
[sender setTranslation:CGPointMake(0, 0) inView:self.tableView];

}

if (sender.state == UIGestureRecognizerStateEnded) {
//incase pan gesture has moved off the cell
for(TestCell *cell in [self.tableView visibleCells]){
[cell.animator removeBehavior:cell.attachmentBehavior];
}

}

}

希望这可以帮助其他人尝试做同样的事情,如果有人知道 UIAttachmentBehavior 的设置以获得与 UIScrollview 相同的感觉,你能告诉我吗,谢谢

关于ios - UITableViewCell 中的 UIAttachmentBehavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19432833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com