你如何找到一个目前规模(缩放级别) UIView
?
Answer 1:
如果你申请的一个尺度变换你的观点,认为改造将可用(足够适当地)通过transform
属性上的UIView。 根据CGAffineTransform文档 ,尺度变换将在变换矩阵坐标(1,1)和(2,2)具有非零值; 因此,你可以通过做让你的X轴和Y比例因子:
CGFloat xScale = view.transform.a;
CGFloat yScale = view.transform.d;
Answer 2:
根据这一来源 ,使用此方法使您无论规模旋转或平移的应用转变:
func scale(from transform: CGAffineTransform) -> Double {
return sqrt(Double(transform.a * transform.a + transform.c * transform.c));
}
我知道我迟到了,但接受的答案在我的情况没有工作。
Answer 3:
检查这个它会帮助你....在此,你可以学习如何使用设置最小和最大变焦倍数UIPinchGestureRecognizer
.... 如何使用UIPinchGestureRecognizer设置最小和最大变焦倍数
Answer 4:
该功能具备的UIScrollView和它的zoomScale财产。
编辑:
了解目前的规模由变换矩阵给出。 刻度值,如你所知,在这里:
sx, 0, 0
0 , sy, 0
. . .. ,1.
为了得到当前的状态,只是记录了变换的状态。 要返回到那个状态,但是,您需要使用您的最后一个变换的逆或加载单位矩阵。
Answer 5:
您的所有答案帮助了我。 谢谢你们!
如果有人有兴趣,这里是我的代码:
#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);
}];
}
}
Answer 6:
这不就是contentScaleFactor
( 参考 )?
文章来源: How to know the current scale of a UIView?