我正在使用以下代码
- (void)panGestureDetected:(UIPanGestureRecognizer *)recognizer
{
static CGRect originalFrame;
if (state == UIGestureRecognizerStateBegan)
{
originalFrame = recognizer.view.frame;
}
else if (state == UIGestureRecognizerStateChanged)
{
CGPoint translate = [recognizer translationInView:recognizer.view.superview];
CGRect newFrame = CGRectMake(fmin(recognizer.view.superview.frame.size.width - originalFrame.size.width, fmax(originalFrame.origin.x + translate.x,0.0)),
fmin(recognizer.view.superview.size.height - originalFrame.size.height, fmax(originalFrame.origin.y + translate.y, 0.0)),
originalFrame.size.width,
originalFrame.size.height);
recognizer.view.frame = newFrame;
}else if (state == UIGestureRecognizerStateEnded)
{
[self performSelectorInBackground:@selector(ChangeViewAlphaTo1) withObject:nil];
}
}
答案 0 :(得分:0)
主要问题是你试图在一行中解决两个约束。
如果遇到问题,请尝试解决问题。大量陈述难以阅读,甚至难以调试。
CGRect newFrame = CGRectMake(fmin(recognizer.view.superview.frame.size.width - originalFrame.size.width, fmax(originalFrame.origin.x + translate.x,0.0)),
fmin(recognizer.view.superview.size.height - originalFrame.size.height, fmax(originalFrame.origin.y + translate.y, 0.0)),
originalFrame.size.width,
originalFrame.size.height);
几乎无法读取,当您在6个月内重新访问此时,您或其他编码人员将无法告诉您尝试做什么。
尝试用......替换那个怪物。
[self translateView:recognizer.view limitedBySuperViewBounds:translate];
突然间,该方法会告诉你你在做什么。
-(void)translateView:(UIView *)aview limitedBySuperViewBounds:(CGPoint)translate
{
CGRect frameToTranslate = aview.frame;
CGRect superviewBounds= aview.superview.bounds;
frameToTranslate.origin.x = frameToTranslate.origin.x + translate.x;
frameToTranslate.origin.y = frameToTranslate.origin.y + translate.y;
if (translate.x < 0) {
frameToTranslate.origin.x = 0;
}
else if (CGRectGetMaxX(frameToTranslate) > CGRectGetWidth(superviewBounds)){
frameToTranslate.origin.x = CGRectGetWidth(superviewBounds) - CGRectGetWidth(frameToTranslate);
}
if (translate.y < 0) {
frameToTranslate.origin.y = 0;
}
else if (CGRectGetMaxY(frameToTranslate) > CGRectGetHeight(superviewBounds)){
frameToTranslate.origin.y = CGRectGetHeight(superviewBounds) - CGRectGetHeight(frameToTranslate);
}
aview.frame = frameToTranslate;
}
这不仅仅是我的意见,这是Clean Code