ios – 如何将UIView缩放(缩放)到给定的CGPoint

我花了很多时间试图找到一种方法来使用CGAffinescale将视图转换为给定的点,包括解决锚点,移动视图前后的变化和全面的谷歌搜索的中心.我知道这将是一个更简单的UIScrollview;但是我知道在技术上可以做到没有一个,它成为我的脑海中的碎片.

This answer非常接近我想要达到的目标,但答案只提供如何通过巧妙地将中心移动到与您要放大的角落相对的角落来缩放到给定角落(而不是给定点)的细节.

如何修改mvds‘ code将UIView缩放到UIView中的任何给定点?

CGFloat s = 3;
CGAffineTransform tr = CGAffineTransformScale(self.view.transform,s,s);
CGFloat h = self.view.frame.size.height;
CGFloat w = self.view.frame.size.width;
[UIView animateWithDuration:2.5 delay:0 options:0 animations:^{
    self.view.transform = tr;
    self.view.center = CGPointMake(w-w*s/2,h*s/2);
} completion:^(BOOL finished) {}];

解决方法

有两个步骤:首先,您放大要放大的视图.然后你设置这个被炸毁视图的中心,这样你想要看到的部分就在视图的中间.

你应该在纸上画出来,公式如下:(未经测试)

CGFloat s = 3;
CGPoint p = CGPointMake(100,200);
CGAffineTransform tr = CGAffineTransformScale(self.view.transform,s);
CGFloat h = self.view.frame.size.height;
CGFloat w = self.view.frame.size.width;
[UIView animateWithDuration:2.5 delay:0 options:0 animations:^{
    self.view.transform = tr;
    CGFloat cx = w/2-s*(p.x-w/2);
    CGFloat cy = h/2-s*(p.y-h/2);
    self.view.center = CGPointMake(cx,cy); //was: (w*s/2,h-h*s/2);
} completion:^(BOOL finished) {}];

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...