开发者

how to fix the size of the zoom in/ out image in iphone landscape? [closed]

开发者 https://www.devze.com 2023-03-03 05:17 出处:网络
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical andcannot be reasonably answered in its current form. For help clari
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. Closed 10 years ago.

pls provide me the logic of how to fix the size of the pintch in/out of image on the next page with the given image.eg....width=100 and height=150 then image is pintch in/ out upto that level and fix there if user is zoomed more then this size then also the image is fixed to that width ,height .

#import "PinchLibView.h"
#import <QuartzCore/QuartzCore.h>



    @implementation PinchLibView

    @synthesize pinchImage;
    @synthesize pinchScrlView;
    @synthesize figureImageView;
    @synthesize getWidth,getHeight;



        -(void)initPinch{
            figureRect = self.frame;
         contentView = [[UIView alloc]initWithFrame:CGRectMake(0,0,
                                                                  figureRect.size.width, 
                                                                  figureRect.size.height)]; 
            pinchScrlView = [[CustomScrollView alloc]init];
            figureImageView = [[UIImageView alloc]init];
            pinchScrlView.minimumZoomScale =1.0;
            pinchScrlView.maximumZoomScale = 4.0;
            //NSLog(@"%d %d",appDelegate.width1,appDelegate.height1);
            //getWidth=[appDelegate.width1 intValue];
            //getHeight=[appDelegate.height1 intValue];
            //NSLog(@"%d %d",getWidth,getHeight);
        }

        - (void)initScrollView{
            //figureImageView = [[UIImageView alloc]init];
            self.userInteractionEnabled = YES;
            //figureImageView.image = pinchImage;
             figureImageView.contentMode = UIViewContentModeScaleAspectFit;

             pinchScrlView.frame = CGRectMake(0,0, 
                                             figureRect.size.width,  
                                             figureRect.size.height); 

            [pinchScrlView setResetFrame:figureRect];

            pinchScrlView.hidden = NO;
            pinchScrlView.zoomScale = 1.0;
            pinchScrlView.delegate = self;  
            pinchScrlView.showsHorizontalScrollIndicator = NO;
            pinchScrlView.showsVerticalScrollIndicator = NO;    

            figureImageView.frame = CGRectMake(0,5,
                                               figureRect.size.width,figureRect.size.height-10); 

            [contentView addSubview:figureImageView];
            [pinchScrlView addSubview:contentView];

            [self addSubview:pinchScrlView];    


            CATransition *animation = [CATransition animation];
            animation.duration = 0.3f;
            animation.type = kCATransitionFade;

            pinchScrlView.zoomScale = 1.0;
            [pinchScrlView.layer addAnimation: animation forKey: nil];

            /*pinchScrlView.backgroundColor = [UIColor yellowColor];
            contentView.backgroundColor = [UIColor yellowColor];
            figureImageView.backgroundColor = [UIColor redColor];*/
            /*pinchScrlView.backgroundColor = [UIColor whiteColor];
            contentView.backgroundColor = [UIColor whiteColor];
            figureImageView.backgroundColor = [UIColor whiteColor]; */

        }

        - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
                return contentView;
        }


        - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{

            /*  Reset Image if scale in less than   1.0     */
            if(scale <= 1.0){   

            UIEdgeInsets anEdgeInset = { 0, 0, 0, 0};
            pinchScrlView.contentInset = anEdgeInset;

            pinchScrlView.scrlFlag = FALSE;
            pinchScrlView.zoomScale = 0.0;

            pinchScrlView.scrollEnabled = NO;

            CATransition *animation = [ CATransition animation ];
            animation.duration = 0.3f;
            animation.type = kCATransitionFade;

            self.frame = figureRect;
            pinchScrlView.frame = figureRect;

            [self.layer addAnimation: animation forKey: nil ];
            [figureImageView.layer addAnimation: animation forKey: nil ];
            contentView.frame = figureRect; 
            pinchScrlView.contentSize = figureRect.size;
            contentView.center = CGPointMake(self.frame.size.width/2,
                                             self.frame.size.height/2);
            pinchScrlView.center = CGPointMake(self.frame.size.width/2,
                                               self.frame.size.height/2);
        }   

        /*  Make image centered if scale in greater than 1.0  */
        if(pinchScrlView.zoomScale > 1.0 && !pinchScrlView.scrlFlag){
             pinchScrlView.frame = self.superview.frame;

             self.frame =  self.superview.frame;
            pinchScrlView.clipsToBounds = NO;
            pinchScrlView.scrollEnabled = NO;
            pinchScrlView.contentSize = pinchScrlView.frame.size;   
            pinchScrlView.scrlFlag = TRUE;

            CGRect innerFrame =  contentView.frame;//////////
            CGRect scrollerBounds =pinchScrlView.bounds;
            //CGRect scrollerBounds =CGRectMake(50,50,appDelegate.width1,appDelegate.height1);
            if ( ( innerFrame.size.width < scrollerBounds.size.width ) || ( innerFrame.size.height < scrollerBounds.size.height ) )
            {
                CGFloat tempx = contentView.center.x - ( scrollerBounds.size.width / 2 );
                CGFloat tempy = contentView.center.y - ( scrollerBounds.size.height / 2 ); 
                CGPoint myScrollViewOffset = CGPointMake(tempx, tempy);

                pinchScrlView.contentOffset = myScrollViewOffset;
            }
            else if ((innerFrame.size.width > scrollerBounds.size.width) 
                     || (innerFrame.size.height > scrollerBounds.size.height)){
                if(innerFrame.size.width > scrollerBounds.size.width){
                    pinchScrlView.zoomScale =  self.frame.size.width/figureRect.size.width;
                }else if(innerFrame.size.height > scrollerBounds.size.height){
                    pinchScrlView.zoomScale =  self.frame.size.height/figureRect.size.height;
                }
                CGFloat tempx = contentView.center.x - (scrollerBounds.size.width / 2 );
                CGFloat tempy = contentView.center.y - (scrollerBounds.size.height / 2 );
                CGPoint myScrollViewOffset = CGPointMake( tempx, tempy);
                pinchScrlView.contentOffset = myScrollViewOffset;
            }   

            UIEdgeInsets anEdgeInset = { 0, 0, 0, 0};
            if(scrollerBounds.size.width > innerFrame.size.width)
            {
                anEdgeInset.left = (scrollerBounds.size.width - innerFrame.size.width) / 2;
                anEdgeInset.right = -anEdgeInset.left;   
            }
            if(scrollerBounds.size.height > innerFrame.size.height)
            {
                anEdgeInset.top = (scrollerBounds.size.height - innerFrame.size.height) / 2;
                anEdgeInset.bottom = -anEdgeInset.top;   
            }
            pinchScrlView.contentInset =开发者_高级运维 anEdgeInset;
        }

        if(pinchScrlView.zoomScale > 1.0){
            CGRect innerFrame = contentView.frame;

            CGRect scrollerBounds =  pinchScrlView.bounds;
            //CGRect scrollerBounds =CGRectMake(50,50,appDelegate.width1,appDelegate.height1);

            if((innerFrame.size.width < scrollerBounds.size.width) 
               || (innerFrame.size.height < scrollerBounds.size.height)){

                CGFloat tempx = contentView.center.x - (scrollerBounds.size.width / 2 );
                CGFloat tempy = contentView.center.y - (scrollerBounds.size.height / 2 );
                CGPoint myScrollViewOffset = CGPointMake( tempx, tempy);
                pinchScrlView.contentOffset = myScrollViewOffset;
            }
            else if((innerFrame.size.width > scrollerBounds.size.width) 
                    || (innerFrame.size.height > scrollerBounds.size.height)){
                if(innerFrame.size.width > scrollerBounds.size.width){
                    pinchScrlView.zoomScale =  self.frame.size.width/figureRect.size.width;
                }else if(innerFrame.size.height > scrollerBounds.size.height){
                    pinchScrlView.zoomScale =  self.frame.size.height/figureRect.size.height;
                }
                CGFloat tempx = contentView.center.x - (scrollerBounds.size.width / 2 );
                CGFloat tempy = contentView.center.y - (scrollerBounds.size.height / 2 );
                CGPoint myScrollViewOffset = CGPointMake( tempx, tempy);
                pinchScrlView.contentOffset = myScrollViewOffset;
            }

            UIEdgeInsets anEdgeInset = { 0, 0, 0, 0};
            if (scrollerBounds.size.width > innerFrame.size.width){
                anEdgeInset.left = (scrollerBounds.size.width - innerFrame.size.width) / 2;
                anEdgeInset.right = -anEdgeInset.left; 
            }
            if (scrollerBounds.size.height > innerFrame.size.height){
                anEdgeInset.top = (scrollerBounds.size.height - innerFrame.size.height) / 2;
                anEdgeInset.bottom = -anEdgeInset.top; 
            }
            pinchScrlView.contentInset = anEdgeInset;
           }    
        }

        @end


Try this for pinch distance:

-(CGFloat) distanceBetweenTwoPoints:(CGPoint) fromPoint toPoint:(CGPoint) toPoint { float lengthX = fromPoint.x - toPoint.x; float lengthY = fromPoint.y - toPoint.Y; return sqrt((lengthX*lengthX) + (lengthY*lengthY));}

-(void) touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event { //---you figure out a way to detect double tap-- //--records the distance made by the tow touches-- originalDistance = [self distanceBetweenTwoPoints:touch1PT toPoint: touch2PT];}

//---fired when the user moved his finger(s) on the screen--- -(void) touchesMoved: (NSSet *) touches withEvent: (UIEvent *) event {

        //---you figure out a way to detect double tap--
        //---double-touch---
        //---get info of first touch---
        UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0];

        //---get info of second touch---
        UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];

        //---get the points touched---
        CGPoint touch1PT = [touch1 locationInView:[self view]];
        CGPoint touch2PT = [touch2 locationInView:[self view]];

        CGFloat currentDistance = [self distanceBetweenTwoPoints:touch1PT
                                                         toPoint:touch2PT];

        //---zoom in---
        if (currentDistance > originalDistance) {
            imageView.frame = CGRectMake(imageView.frame.origin.x - 2,
                                         imageView.frame.origin.y - 2,
                                         imageView.frame.size.width + 4,
                                         imageView.frame.size.height + 4);
        }
        else {
            //---zoom out---
            imageView.frame = CGRectMake(imageView.frame.origin.x + 2,
                                         imageView.frame.origin.y + 2,
                                         imageView.frame.size.width - 4,
                                         imageView.frame.size.height - 4);
        }
        originalDistance = currentDistance;}
0

精彩评论

暂无评论...
验证码 换一张
取 消