Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将UIImageView的平移手势边界限制在UIView中的内部_Objective C - Fatal编程技术网

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也是。。。。