1

これがiPhotoの画像です。

ここに画像の説明を入力してください

これがiPhotoの左上隅にズームインされたものです。

ここに画像の説明を入力してください

これが私のアプリの同じ画像です:

ここに画像の説明を入力してください

ここでは、私のアプリの左上隅にズームインしています。

ここに画像の説明を入力してください

画像を囲む余分な灰色のスペースをなくし、スクロールをiPhotoのようなUIImageの境界に制限するにはどうすればよいですか?

ありがとう

4

2 に答える 2

0

したがって、サードパーティのライブラリを使用する以外に、次を使用してこの問題を解決しました。

iOS。UIScrollviewのスクロールを制限する方法を教えてください。、答えを次の方法に適応させます。これは自明であることを願っています。

- (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

}
于 2012-12-13T19:22:25.720 に答える
0

あなたはそれをするライブラリを使うことができます。MWPhotoBrowserをお試しください。

于 2012-12-11T23:06:46.323 に答える