首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何像在iPhoto中一样,将UIImageView的滚动限制在UIImage的范围内?

如何像在iPhoto中一样,将UIImageView的滚动限制在UIImage的范围内?
EN

Stack Overflow用户
提问于 2012-12-12 07:00:57
回答 2查看 161关注 0票数 1

这是一张iPhoto格式的图片:

这是放大到iPhoto中左上角的图片:

下面是我的应用程序中的相同图片:

在这里,它被放大到我的应用程序的左上角:

如何才能去掉图像周围多余的灰色空间,并像iPhoto一样将滚动限制在UIImage的边界上?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-14 03:22:26

因此,除了使用第三方库之外,我还使用以下方法解决了这个问题:

iOS. How do I restrict UIScrollview scrolling to a limited extent?,将答案调整为以下方法,我希望这些方法不言而喻:

代码语言:javascript
复制
- (CGRect) methodThatGetsImageSizeOnScreen
{

float frameHeight;
float frameWidth;
float frameXOrigin;
float frameYOrigin;

float threshold;
BOOL thisImageTouchesLeftAndRight;

UIInterfaceOrientation thisOrientation = self.interfaceOrientation;

if (UIInterfaceOrientationIsLandscape(thisOrientation)){

    threshold = 748.0/1024.0;

    if ((self.imageToPresent.size.height == self.imageToPresent.size.width) | ((self.imageToPresent.size.height/self.imageToPresent.size.width) > threshold)){

        thisImageTouchesLeftAndRight = NO;

        frameWidth = (748/self.imageToPresent.size.height)*self.imageToPresent.size.width;
        frameHeight = 748;
        frameXOrigin = (1024-frameWidth)/2;
        frameYOrigin = 0;
    }
    else
    {
        thisImageTouchesLeftAndRight = YES;

        frameWidth = 1024;
        frameHeight = (1024/self.imageToPresent.size.width)*self.imageToPresent.size.height;
        frameXOrigin = 0;
        frameYOrigin = (748-frameHeight)/2;
    }
}
else {

    threshold = 768.0/1004.0;

    if ((self.imageToPresent.size.height == self.imageToPresent.size.width) | ((self.imageToPresent.size.width/self.imageToPresent.size.height) > threshold)){

        thisImageTouchesLeftAndRight = YES;

        frameWidth = 768;
        frameHeight = (768/self.imageToPresent.size.width)*self.imageToPresent.size.height;
        frameXOrigin = 0;
        frameYOrigin = (1004-frameHeight)/2;
    }
    else
    {
        thisImageTouchesLeftAndRight = NO;

        frameWidth = (1004/self.imageToPresent.size.height)*self.imageToPresent.size.width;
        frameHeight = 1004;
        frameXOrigin = (768-frameWidth)/2;
        frameYOrigin = 0;
    }


}

CGRect theRect = CGRectMake(frameXOrigin, frameYOrigin, frameWidth, frameHeight);

return theRect;
}

#pragma mark - UIScrollViewDelegate

- (void) scrollViewDidScroll:(UIScrollView*)scroll{

UIInterfaceOrientation thisOrientation = self.interfaceOrientation;

float largeDimension;
float smallDimension;

if (UIInterfaceOrientationIsLandscape(thisOrientation)){

    largeDimension = 1024;
    smallDimension = 748;
}
else{

    largeDimension = 1004;
    smallDimension = 768;

}

CGPoint offset = scroll.contentOffset;

CGRect results = [self methodThatGetsImageSizeOnScreen];


float frameHeight = results.size.height;
float frameYOrigin = results.origin.y;


float frameWidth = results.size.width;
float frameXOrigin = results.origin.x;


//So, we start the limiting of a landscape image in portrait (in the y direction) when we exceed the following criteria:

if((frameHeight*self.scrollView.zoomScale) > largeDimension){

    if(offset.y < self.scrollView.zoomScale*frameYOrigin) offset.y = self.scrollView.zoomScale*frameYOrigin;

    if(offset.y > ((self.scrollView.zoomScale*frameYOrigin)+(frameHeight*self.scrollView.zoomScale)-largeDimension)) offset.y = ((self.scrollView.zoomScale*frameYOrigin)+(frameHeight*self.scrollView.zoomScale)-largeDimension);

}

if((frameWidth*self.scrollView.zoomScale) > largeDimension){

    if(offset.x < self.scrollView.zoomScale*frameXOrigin) offset.x = self.scrollView.zoomScale*frameXOrigin;

    if(offset.x > ((self.scrollView.zoomScale*frameXOrigin)+(frameWidth*self.scrollView.zoomScale)-largeDimension)) offset.x = ((self.scrollView.zoomScale*frameXOrigin)+(frameWidth*self.scrollView.zoomScale)-largeDimension);

}

    // Set offset to adjusted value
    scroll.contentOffset = offset;

//Remember you may want your minimum zoomScale set in viewDidLoad or viewWillAppear

}
票数 0
EN

Stack Overflow用户

发布于 2012-12-12 07:06:46

你可以使用一个可以做到这一点的库。试试MWPhotoBrowser

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13829960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档