我花了很多时间试图找到一种方法来使用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) {}];