如何修复 iPhone 横向放大/缩小图像的大小? [关闭]
Posted
技术标签:
【中文标题】如何修复 iPhone 横向放大/缩小图像的大小? [关闭]【英文标题】:how to fix the size of the zoom in/ out image in iphone landscape? [closed] 【发布时间】:2011-08-18 06:10:23 【问题描述】:请为我提供如何使用给定的图像修复下一页上图像的大小输入/输出的逻辑。例如....宽度=100 和高度=150 然后图像是输入/输出到那个级别,如果用户缩放超过这个大小,那么图像也被固定到那个宽度,高度。
#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
【问题讨论】:
可能是我累了,但我无法理解您的问题。可以加标点吗? 刚刚修复了图像的放大以固定宽度和高度,因此它就像动态宽度和高度 嗨,我在这里 我们只是不知道您在问什么,因为您的问题根本没有任何意义。诸如此类的评论无助于改进它,而且一切都在阻止人们甚至不想尝试帮助你。 我希望该图像只是放大和缩小到固定宽度,如果用户想要放大更多,但它不可能和用户给出的高度,例如。分别像 200 和 300。 【参考方案1】:试试这个捏距离:
-(CGFloat) distanceBetweenTwoPoints:(CGPoint) fromPoint toPoint:(CGPoint) toPoint 浮点长度X = fromPoint.x - toPoint.x; 浮点长度Y = fromPoint.y - toPoint.Y; 返回 sqrt((lengthX*lengthX) + (lengthY*lengthY));
-(void) touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event //---你想出了一种检测双击的方法—— //--记录拖车接触的距离-- originalDistance = [self distanceBetweenTwoPoints:touch1PT toPoint: touch2PT];
//---当用户在屏幕上移动手指时触发--- -(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;
【讨论】:
以上是关于如何修复 iPhone 横向放大/缩小图像的大小? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章