gle*_*rey 13 zoom objective-c cgaffinetransform ios
我花了很多时间试图找到一种方法来使用CGAffineScale将视图转换为给定点,包括弄乱锚点,在转换之前和之后移动视图的中心以及全面的Google搜索.我知道使用UIScrollview会更简单; 但是我知道技术上可以不用一个,而且它在我脑海里成了一个分裂.
这个答案非常接近我想要实现的目标,但答案只提供了如何通过巧妙地将中心移动到与要放大的角相对的角落来放大到给定角(而不是给定点)的细节. .
如何修改mvds的代码以将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) {}];
Run Code Online (Sandbox Code Playgroud)
涉及两个步骤:首先,您要放大要放大的视图。然后,设置此爆炸视图的中心,以使要查看的部分最终位于视图的中间。
您应该在纸上画出来,公式如下:(未经测试)
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) {}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11274 次 |
| 最近记录: |