如何知道一个UIView的目前的规模?(How to know the current scale

2019-06-27 04:58发布

你如何找到一个目前规模(缩放级别) 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?