美文网首页
UIScrollView 缩放至某一区域

UIScrollView 缩放至某一区域

作者: 大成小栈 | 来源:发表于2023-06-06 09:52 被阅读0次

UIScrollView 缩放很简单,设置以下必要代理、参数即可:

- (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
self.scrollView.maximumZoomScale = 15.0;
self.scrollView.minimumZoomScale = 0.2;

注:每次缩放只能操作一个View,同一层级的其他View呆在原地frame不变(scrollView承载的内容缩放,会使View移动,但其尺寸不变); demo中只缩放了imgTest并定位到其中的蓝色方框。

#import "ViewController2.h"

@interface ViewController2 ()<UIScrollViewDelegate>
@property (strong, nonatomic) UIScrollView *scrollView;
@property (strong, nonatomic) UIImageView *imgTest;
@property (strong, nonatomic) UIView *viewA;
@end

@implementation ViewController2

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = UIColor.whiteColor;
    
    self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
    self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:_scrollView];
    
    //设置代理对象
    self.scrollView.delegate = self;
    //设置缩放比例
    self.scrollView.maximumZoomScale = 15.0;
    self.scrollView.minimumZoomScale = 0.2;
    self.scrollView.alwaysBounceVertical = YES;
    self.scrollView.alwaysBounceHorizontal = YES;
    
    self.scrollView.layer.borderColor = UIColor.redColor.CGColor;
    self.scrollView.layer.borderWidth = 2.0;
    //self.scrollView.bounces// 默认为yes
    
    self.imgTest = [[UIImageView alloc] initWithFrame:_scrollView.bounds];
    self.imgTest.image = [UIImage imageNamed:@"ScreenShot"];
    [self.scrollView addSubview:_imgTest];
    
    CGFloat blueViewHeight = 100;
    CGSize size = self.imgTest.frame.size;
    
    self.viewA = [[UIView alloc] initWithFrame:CGRectMake((size.width - blueViewHeight)/2, (size.height - blueViewHeight)/2, blueViewHeight, blueViewHeight)];
    self.viewA.backgroundColor = UIColor.blueColor;
    [self.imgTest addSubview:self.viewA];
}

//告诉UIScrollView 是哪个控件需要缩放
- (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return  self.imgTest;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
//    // 移动至中心并放大
//    CGRect scaleRect = [self.imgTest convertRect:_viewA.frame toView:self.scrollView];
//    [self.scrollView zoomToRect:scaleRect animated:YES];
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    
    // 移动至中心并放大
    CGRect scaleRect = [self.imgTest convertRect:_viewA.frame toView:self.scrollView];
    [self.scrollView zoomToRect:scaleRect animated:YES];
    
}

@end

相关文章

网友评论

      本文标题:UIScrollView 缩放至某一区域

      本文链接:https://www.haomeiwen.com/subject/oxcgedtx.html