如何知道UIView的当前规模?

你如何findUIView的当前比例(缩放级别)?

如果您将缩放转换应用于视图,那么该转换将通过UIView上的transform属性 (适当地)可用。 根据CGAffineTransform文档 ,在变换matrix中,坐标(1,1)和(2,2)处的比例变换将具有非零值; 你可以通过这样做来得到你的x和y比例因子:

 CGFloat xScale = view.transform.a; CGFloat yScale = view.transform.d; 

检查它会帮助你….在这里你可以学习如何使用UIPinchGestureRecognizer设置最小和最大的缩放比例…. 如何使用UIPinchGestureRecognizer 设置最小和最大的缩放比例

该function是与UIScrollView和它的zoomScale属性一起提供的。

编辑:

了解当前的尺度是由变换matrix给出的。 如您所知,比例值在这里:

 sx, 0, 0 0 , sy, 0 . . .. ,1. 

要获得当前状态,只需logging变换的状态。 但是,要返回到该状态,则需要使用上次转换的反转或加载单位matrix。

你所有的答案帮助了我。 谢谢你们!

如果有人有兴趣,这是我的代码:

 #define MAX_SCALE 3 #define MIN_SCALE 0.3 // PINCH - (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer { //START if (recognizer.state == UIGestureRecognizerStateBegan) { recognizer.scale = selectedView.transform.a; } float scale; if (recognizer.scale < MIN_SCALE) { scale = MIN_SCALE - (MIN_SCALE - recognizer.scale)/4; }else if (recognizer.scale > MAX_SCALE) { scale = MAX_SCALE - (MAX_SCALE - recognizer.scale)/4; }else { scale = recognizer.scale; } selectedView.transform = CGAffineTransformMakeScale(scale, scale); //END if (recognizer.state == UIGestureRecognizerStateEnded) { if (recognizer.scale < MIN_SCALE) { scale = MIN_SCALE; } if (recognizer.scale > MAX_SCALE) { scale = MAX_SCALE; } [UIView animateWithDuration:0.3 animations:^{ selectedView.transform = CGAffineTransformMakeScale(scale, scale); }]; } 

}

是不是contentScaleFactor ( 参考 )?

根据这个来源 ,使用这种方法给你的规模无论旋转或平移应用于变换:

 func scale(from transform: CGAffineTransform) -> Double { return sqrt(Double(transform.a * transform.a + transform.c * transform.c)); } 

我知道我晚了,但接受的答案在我的情况下是行不通的。