ios 学习之处理捏合手势

261 阅读1分钟
//
//  ViewController.swift
//  疯狂ios
//
//  Created by gy on 2023/1/8.
//

import UIKit

class ViewController: UIViewController {

    var srcImage:UIImage!
    var imageView:UIImageView!
    var currentScale:Float = 1 //设置初始的缩放比例
    override func viewDidLoad() {
        super.viewDidLoad()
        self.imageView = UIImageView.init(frame: self.view.bounds)
        self.view.addSubview(imageView)
    
        
        srcImage = UIImage.init(named: "bg.jpeg")
        self.imageView.image = srcImage
        self.imageView.isUserInteractionEnabled = true
        self.imageView.isMultipleTouchEnabled = true
        var gesture = UIPinchGestureRecognizer.init(target: self, action: #selector(handleTap(gesture:)))
        self.imageView.addGestureRecognizer(gesture)
    
    }
    
    @objc
    func handleTap(gesture:UIPinchGestureRecognizer){
        var scale = gesture.scale
        print("currentScale===",scale)
        if(gesture.state == .began){
            currentScale = Float(self.imageView.image!.size.width / srcImage.size.width);
            print("currentScale===",currentScale)
        }
        let targetSize = CGSize.init(width: self.srcImage.size.width * CGFloat(currentScale) * scale, height:  self.srcImage.size.height * CGFloat(currentScale) * scale);
        self.imageView.image = srcImage.scaleToFitAtCenter(size: targetSize)
        self.imageView.frame = CGRect.init(x: 0, y: 0, width: targetSize.width, height: targetSize.height)
    }
}

oc代码

//
//  OCUIViewController.m
//  疯狂ios
//
//  Created by gy on 2023/1/14.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "疯狂ios-Swift.h"

@interface OCUIViewController : UIViewController

@end

@implementation OCUIViewController

{
    UIImage* srcImage;
    UIImageView* imageView;
    CGFloat _currentScale;
}

-(void) viewDidLoad {
    //本地图片创建UIImage的两种方式
    srcImage = [UIImage imageNamed:@"bg.jpeg"];
    
    imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
    imageView.image = srcImage;
    
    UIPinchGestureRecognizer* gesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [imageView addGestureRecognizer:gesture];
    imageView.userInteractionEnabled = true;
    imageView.multipleTouchEnabled = true;
    [self.view addSubview:imageView];
}

-(void) handleTap:(UIPinchGestureRecognizer*) gesture{
    NSLog(@"handleTap");
    float scale = gesture.scale;
    if(gesture.state == UIGestureRecognizerStateBegan){
        _currentScale = ((float)(imageView.image.size.width)) / ((float)(srcImage.size.width));
    }
   
    CGSize targetSize = CGSizeMake(srcImage.size.width * scale * _currentScale, srcImage.size.height * scale * _currentScale);
    imageView.frame = CGRectMake(0, 0, targetSize.width, targetSize.height);
    imageView.image = [srcImage resize:targetSize];
    
}

@end