gpt4 book ai didi

objective-c - 正确的手势识别器 MVC 模式

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

我正在创建一个自定义手势识别器,我的目标是在手势持续时间内记录超过特定阈值的移动,然后在手势结束时报告该数据集。我对手势识别器对象扮演的角色有点模糊。

因为我对 OOP 还是有点陌生​​,所以我想知道使用这个手势识别器的 MVC 的最佳实践。具体来说,手势识别器应该是“愚蠢的”并且只向 View Controller 报告移动,并让逻辑和日志记录发生在 VC 中,还是在手势识别器中做轻逻辑和日志记录一样好,然后让它手势完成后报告,并让 VC 向手势识别器询问数据。

这是我目前正在制作原型(prototype)的一些示例代码(使用逻辑和登录手势识别器的方法):

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
if (self.state == UIGestureRecognizerStateFailed) return;

CGPoint nowPoint = [[touches anyObject] locationInView:self.view];
int xMovement = nowPoint.x - self.previousPoint.x;
int yMovement = nowPoint.y - self.previousPoint.y;

if (xMovement >= 0) {
// positive/no x movement, log points if x or y has movement above threshold
if (xMovement > MovementThreshold || yMovement > MovementThreshold) {
NSLog(@"Movement above the threshold!\nx: %f\ty: %f", nowPoint.x, nowPoint.y);
self.previousPoint = nowPoint;
}
} else {
// negative x movement
self.state = UIGestureRecognizerStateFailed;
}
}

最佳答案

我会去记录手势识别器对象。我是这样看的。

如果我想在其他任何地方使用这个手势识别器进行日志记录,我需要做什么?如果您的日志记录在 View Controller 中,那么您必须剪切并粘贴该代码。如果日志记录在手势识别器中,您只需创建一个新的手势识别器实例。

如果我想从此 View Controller 中删除手势识别器,我需要做什么?同样,如果您的日志记录代码位于 View Controller 中,则工作量会增加很多。

封装告诉我我想将我的代码保留在手势识别器中。

也就是说,您的手势识别器不必是单个对象。它可以是小集。一种用于手势识别器本身,一种用于记录行为,另一种用于数据存储。这实际上取决于每项任务的复杂程度。如果每个新数据点只是将一个数字添加到数组中,那么将其分开似乎为时过早,但如果它是您想要独立于手势识别器本身传递的数据,那么最好将其分开出来。

如果您认为自己做出了错误的选择,这就是重构的目的。 :)

关于objective-c - 正确的手势识别器 MVC 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12495941/

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