作者热门文章
- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我花了很多时间试图找到一种使用 CGAffineScale 将 View 转换为给定点的方法,包括摆弄 anchor 、在转换前后移动 View 的中心以及全面的谷歌搜索。我知道使用 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) {}];
最佳答案
涉及 2 个步骤:首先,放大要放大的 View 。然后设置这个放大 View 的中心,使您想要看到的部分最终位于 View 的中间。
你应该把它画在纸上,公式如下:(未经测试)
CGFloat s = 3;
CGPoint p = CGPointMake(100, 200);
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;
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) {}];
关于ios - 如何将 UIView 缩放(缩放)到给定的 CGPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18329286/
我是一名优秀的程序员,十分优秀!