iOS之图片缩放的几种方法

    UIImage *image=[UIImageimageWithData:datasscale:0.8];




方法一:scrollView

#import "ViewController.h"


@interface ViewController ()<UIScrollViewDelegate>


@property (weak,nonatomic)IBOutletUIScrollView *scrollView;

@property (weak,nonatomic)IBOutletUIImageView *imageView;


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    

    /**

     scrollView中的内容滚动就必须要设置:滚动范围

     

     contentSize : 子控件的大小,限定滚动的范围

     

     contentSize 在设置的时候,一定要比scrollViewsize要大

     

     如果size中的宽度设为 0 ,就表示在横向中不能滚动

     */

    

    _scrollView.contentSize =self.imageView.frame.size;


    /**

      minimumZoomScale;   --> 最小的缩小倍数

       maximumZoomScale;  --> 最大的放大倍数

     */

    

    _scrollView.minimumZoomScale =0.3;

    _scrollView.maximumZoomScale =5;

    

    // 设置控制器成为scrollView的代理

    _scrollView.delegate =self;

    

    [self.scrollViewsetZoomScale:1animated:YES];//设置缩放的倍数,如果缩放的倍数越大,scrollview滚动的范围也会变大,图片会变的模糊


//    [self.scrollView zoomToRect:CGRectMake(0, 0, 300, 300) animated:YES];

    

}

// 返回的view将被拉伸(缩放)

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {

    return_imageView;

}


// 只要图片在放大/缩小的过程中都会一直调用

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {

    NSLog(@"scrollViewDidZoom");

}


// 开始缩放的时候调用

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {

    NSLog(@"scrollViewWillBeginZooming");

}


// 结束的时候调用

// withView: 进行缩放的view

// atScale: 缩放的倍数

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

    NSLog(@"scrollViewDidEndZooming--%f",scale);

}



================

方法二:quarter2D绘图

- (void)drawRect:(CGRect)rect {

    //绘制图片

    //1.加载图片

    UIImage * image = [UIImageimageNamed:@"me"];

    

    //2.绘制图片

    [image drawAtPoint:CGPointMake(0,0)];//从指定点绘制,如果图片小区绘图区域,则会拉伸

//    [image drawAsPatternInRect:rect];//以平铺的方式绘制

//    [image drawInRect:rect];//以拉伸的方式绘制

    

}


方法三:用Imageview的frame控制图片的大小

 UIImage *image=[UIImageimageNamed:@"tq"];

    UIImageView *imageV=[[UIImageViewalloc]initWithImage:image];

//    imageV.frame=self.view.frame;

    imageV.frame=CGRectMake(0,0,200,300);

    [self.viewaddSubview:imageV];



方法四:设置layer的transform属性来缩放

    UIImage *image=[UIImageimageNamed:@"tq"];

    UIImageView *imageV=[[UIImageViewalloc]initWithImage:image];

//    imageV.frame=self.view.frame;

    imageV.frame=CGRectMake(0,0,200,300);

    [self.viewaddSubview:imageV];

   //方法一:   self.redLayer.transform = CATransform3DScale(self.redLayer.transform, 1, 1, 0.5);

    //  方法二:  self.redLayer.transform = CATransform3DMakeScale(0.5, 0.5, 1);

    

    //KVC

    //   方法三: NSValue * value = [NSValue valueWithCATransform3D:CATransform3DScale(self.redLayer.transform, 0.5, 0.5, 1)];

        [self.redLayer setValue:value forKeyPath:@"transform"];

//方法四:KVC的方式设置transform属性来缩放()

    [imageV.layer setValue:@(2) forKeyPath:@"transform.scale.x"];//x轴方向放大两倍

    [imageV.layer setValue:@(2) forKeyPath:@"transform.scale.y"];//y轴方向放大两倍



方法五:设置imageview的transform属性

    UIImage *image=[UIImage imageNamed:@"tq"];

    UIImageView *imageV=[[UIImageView alloc]initWithImage:image];

//    imageV.frame=self.view.frame;

    imageV.frame=CGRectMake(00200300);

    [self.view addSubview:imageV];

imageV.transform=CGAffineTransformMakeScale(3,3);//宽高都放大3倍,这个方法是view的transform属性的方法


注意:如果是用view的layer.transform就要用CATransform3DScale()方法;如果用view.transform就要用CGAffineTransformMakeScale()方法;



方法五。自带内容的控件,如imageview,button,会设置contentviewmodel来适应自身的大小;


方法六:

CGSize newSize=CGSizeMake(100, 100);


UIGraphicsBeginImageContext(newSize); //开启图形上下文  

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 图片从新绘制
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();//从图形上下文获取新的图片
UIGraphicsEndImageContext(); //关闭图形上下文

或者

UIGraphicsBeginImageContextWithOptions(image.size,NO,0.2);//参数:上下文区域大小,是否透明,缩放率---相当于失真度

    [image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];

    UIImage*

    newImage = UIGraphicsGetImageFromCurrentImageContext();//从图形上下文获取新的图片

    UIGraphicsEndImageContext();


/////////////
方法七:

UIImage *image = info[UIImagePickerControllerEditedImage];

    

   NSData *imageData = UIImageJPEGRepresentation(image, 0.2);//对图像做了压缩,0.2是失真度


方法八:图片拉伸:http://blog.csdn.net/u011146511/article/details/51233055






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以考虑使用UIKit框架中的UIPanGestureRecognizer和UIPinchGestureRecognizer手势来实现自由移动和矩形框。 首先,您需要创建一个UIView子类来表示矩形框,并在该视图上添加手势识别器。在手势识别器的处理函数中,您可以使用手势的位移和值来更新矩形框的位置和大小。 以下是一个简单的示例: ``` class RectangleView: UIView { private var lastLocation = CGPoint.zero private var lastScale: CGFloat = 1.0 override init(frame: CGRect) { super.init(frame: frame) // 添加手势识别器 let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:))) let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(_:))) self.addGestureRecognizer(panGesture) self.addGestureRecognizer(pinchGesture) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } // 处理拖动手势 @objc private func handlePan(_ gesture: UIPanGestureRecognizer) { let translation = gesture.translation(in: self.superview) self.center = CGPoint(x: lastLocation.x + translation.x, y: lastLocation.y + translation.y) if gesture.state == .ended { lastLocation = self.center } } // 处理手势 @objc private func handlePinch(_ gesture: UIPinchGestureRecognizer) { switch gesture.state { case .began: lastScale = gesture.scale case .changed: let scale = gesture.scale / lastScale self.transform = self.transform.scaledBy(x: scale, y: scale) lastScale = gesture.scale default: break } } } ``` 在您的视图控制器中,您可以创建一个RectangleView实例,并将其添加到父视图中: ``` let rectView = RectangleView(frame: CGRect(x: 100, y: 100, width: 100, height: 100)) self.view.addSubview(rectView) ``` 这样,您就可以通过拖动和手势来移动和矩形框了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值