Objective c 将UIImageView的平移手势边界限制在UIView中的内部
我正在使用下面的代码Objective c 将UIImageView的平移手势边界限制在UIView中的内部,objective-c,Objective C,我正在使用下面的代码 - (void)panGestureDetected:(UIPanGestureRecognizer *)recognizer { static CGRect originalFrame; if (state == UIGestureRecognizerStateBegan) { originalFrame = recognizer.view.frame; } else if (state == UIGesture
- (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];
}
}
主要问题是您试图在一行中解决两个约束 当你有问题时,试着把事情分解。大量语句很难阅读,甚至更难调试
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;
}
-(void)translateView:(UIView*)受SuperViewBounds限制的视图:(CGPoint)translate
{
CGRect FRAMETOTTRANSLATE=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;
}
这不仅仅是我的观点,这是你能对你的问题再解释一下吗。标题不太适合你的回答沃伦·伯顿。我只想将UIImageView平移到UIImageView上的UIImage的边界上。但是,它应该在UIImageView所在的UIView的边界上进行。谢谢你的建议Warren。我会检查你的代码并让你知道结果。Gr8也是。。。。