【发布时间】:2013-01-29 23:51:03
【问题描述】:
我想在视图上模拟“放大”。较大的视图将作为子视图添加到较小的视图的父视图中,并且较大的视图应该看起来像是从较小的视图放大。给定小视图fromRect 的矩形和放大大视图finalRect 的最后一帧,正确的变换是什么?
我想方法签名将如下所示,view 是超级视图。我写了这个来帮助自己,但还没有弄清楚。
-(CGAffineTransform) translatedAndScaledTransformUsingViewRect:(CGRect)viewRect fromRect:(CGRect)fromRect inView:(UIView*) view
{
//calculate the scaling based on the final frame of viewToBeStretched (viewRect) vs the "fromRect"
CGFloat scaleX = ?, scaleY = ?;
CGAffineTransform scaleTransform = CGAffineTransformMakeScale(scaleX, scaleY);
//use translation instead of modifying the view's center, since frame changes with transforms are no good
CGFloat translationX = ?, translationY =?;
CGAffineTransform translationTransform = CGAffineTransformMakeTranslation(translationX, translationY);
CGAffineTransform final = CGAffineTransformConcat(scaleTransform, translationTransform);
return final;
}
【问题讨论】:
-
您知道,对于比例尺,只需将您希望调整大小的矩形的最终长度除以视图的当前大小即可。翻译有点难。
-
@CodaFi 对,我可以只进行缩放,但不想污染这里的示例。我可以轻松地将 center 属性设置为较小视图的中心,但这不适用于变换。
-
您在此处发布的那段代码似乎是正确的,那么究竟是什么不起作用?
-
无论如何,我建议将较大的视图添加到您的超级视图 pre-transformed 中,这样一旦用户点击它,它就会完全覆盖较小的视图。然后你用动画将变换矩阵重置为单位矩阵,这样它就会从小视图的位置弹出。
标签: ios objective-c cgaffinetransform cgrect rect