如何知道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)); }
我知道我晚了,但接受的答案在我的情况下是行不通的。
- Swift + CoreData:无法在NSManagedObject子类上设置Bool – Bug?
- iOS无法执行HTTP GET请求 – 错误域= NSURLErrorDomain代码= -1012