gpt4 book ai didi

ios - 使用平移移动将部分 Table View Cell 滑开

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

我有一个表格,其中包含 NIB 文件中的自定义单元格。结果应该是这样的,我要捕获单元格并将其滑出屏幕。注:只是细胞的一部分。其他部分将保留。我在单元格上运行平移运动时遇到问题。 NSlog 正确记录了移动,但我无法随单元移动。我的 cell.m 看起来像这样:

#import "MIKETableViewCell.h"

static NSString *CellTableIdentifier = @"MIKETableViewCell";

@implementation MIKETableViewCell

@synthesize timeLabel = _timeLabel;
@synthesize priceLabel = _priceLabel;
@synthesize infoLabel = _infoLabel;


- (void)awakeFromNib
{
// Initialization code
}


-(void)layoutSubviews
{
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognizer)];

[self addGestureRecognizer:panGesture];
}


-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

self = [super initWithStyle:style reuseIdentifier:CellTableIdentifier];

return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];

// Configure the view for the selected state
}

-(void)panGestureRecognizer
{

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognizer)];
NSLog(@"Panned!");

CGPoint translation = [panGesture translationInView:self];
panGesture.view.center = CGPointMake(panGesture.view.center.x + translation.x,
panGesture.view.center.y + translation.y);

}

@end

感谢您的回答!

最佳答案

您的代码无法移动您的 View ,这是不正确的。平移手势识别器给出的值从用户第一次触摸的点开始,从 0 开始,随着用户将手指从该点移动得越远,值就会不断增加。

您需要记录 View 的起始中心点并将平移值添加到该起始点以计算新的中心点,或者每次调整 View 中心时将平移值重置为零。

如果您不这样做,则每次平移值发生变化时,您都会将先前的移动量加上任何新的移动量添加到中心点。这导致变化量疯狂放大。

想象一下用户点击 (100, 100),然后从那里向下向右拖动。您被调用的翻译首先是 (+5,+5),然后是 (+10,+10),然后是 (+15,+15),然后是 (+20,+20),依此类推,直到 ( +100,+100)。这意味着用户将 View 向右拖动 100 点,向下拖动 100 点。但是,您首先将 (5,5) 添加到中心,然后是 (10,10),然后是 (15,15),依此类推。当用户的手指到达 (200,200) 时,您已经添加了比用户实际对中心位置所做的 (+100, +100) 更改。

在您的代码中,您可以通过添加一行来修复它:

-(void)panGestureRecognizer:(UIPanGestureRecognizer *)发送者

{
CGPoint translation = [sender translationInView:self];

//log the translation so you can see if it's working
NSLog(@"Panned with translation point: %@", NSStringFromCGPoint(translation));

sender.view.center = CGPointMake(sender.view.center.x + translation.x,
sender.view.center.y + translation.y);

//-------------------------------------------------------
//---below is the line you need to add to zero out the translation.---
[sender setTranslation: CGPointZero inView: self];
//-------------------------------------------------------

}

关于ios - 使用平移移动将部分 Table View Cell 滑开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24249945/

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