繁体   English   中英

变换视图,保持子视图大小

[英]transform view, keep subview size

我有一个视图,用户可以通过UIGestureRecognizer进行缩放旋转 该视图包含两个视图:

 superview
  - content
  - button

content应缩放和旋转, button应保持其大小和位置。
我正在CGAffineTransformUIGestureRecognizer帮助下缩放和旋转视图。


我该如何实现?

我试过了:

  • 缩放/旋转superview并重置button变换和位置。 没有成功
  • 缩放/旋转content并尝试将content.frame.size设置为superview 没有成功 (尽管我认为这必须以某种方式起作用)。
  • 还有一些晦涩的坏事,这些都不值得一提。

编辑:

处理旋转和缩放的代码:

if ([recognizer respondsToSelector:@selector(rotation)]) {
    CGFloat rotation = 0.0f - (self.lastRotation - [(UIRotationGestureRecognizer *) recognizer rotation]);

    CGAffineTransform currentTransform = self.content.transform;
    CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform, rotation);
    self.content.transform = newTransform;

    self.lastRotation = [(UIRotationGestureRecognizer *) recognizer rotation];

} else if ([recognizer respondsToSelector:@selector(scale)]) {
    CGFloat scale = 1.0f - (self.lastScale - [(UIPinchGestureRecognizer *) recognizer scale]);

    CGAffineTransform currentTransform = self.content.transform;
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
    self.content.transform = newTransform;

    self.lastScale = [(UIPinchGestureRecognizer *) recognizer scale];
}

只是基本的缩放和旋转,没有任何幻想。

实际解决方案:

if ([recognizer respondsToSelector:@selector(rotation)]) {
    CGFloat rotation = 0.0f - (self.lastRotation - [(UIRotationGestureRecognizer *) recognizer rotation]);

    CGAffineTransform currentTransform = self.transform;
    CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform, rotation);
    self.transform = newTransform;

    self.lastRotation = [(UIRotationGestureRecognizer *) recognizer rotation];

} else if ([recognizer respondsToSelector:@selector(scale)]) {
    CGFloat scale = 1.0f - (self.lastScale - [(UIPinchGestureRecognizer *) recognizer scale]);

    CGRect bounds = self.bounds;
    bounds.size.width *= scale;
    bounds.size.height *= scale;
    self.bounds = bounds;

    self.lastScale = [(UIPinchGestureRecognizer *) recognizer scale];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM