ios - UIPinchGestureRecognizer 调整自定义 UIView 的大小

标签 ios objective-c uiview uipinchgesturerecognizer

我创建了一个自定义 UIView,我试图让 UIPinchGestureRecognizer 处理它的大小调整。 但是当我测试我的代码时,文本在捏合时会调整大小,并且框架仍然是相同的大小。

在floatingToolbar.m中

-(void) pinchFired:(UIPinchGestureRecognizer *)recognizer{
    if (recognizer.state == UIGestureRecognizerStateChanged) {

        CGFloat scale = [recognizer scale];

        if ([self.delegate respondsToSelector:@selector(floatingToolbar:didPinchWithScale:)]) {
            [self.delegate floatingToolbar:self didPinchWithScale:scale];
        }

        [recognizer setScale:scale];
    }
}

在SBViewController.m

-(void) floatingToolbar:(SBAwesomeFloatingToolbar *)toolbar didPinchWithScale:(CGFloat)scale{
    NSLog(@"Scale is ------  %f",scale);   
    CGAffineTransform currentTransform = CGAffineTransformIdentity;
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
    toolbar.transform = newTransform;
}

最佳答案

基本上有两个问题:

更新比例

首先,我认为您想要将 [recognizer setScale:scale] 更改为 recognizer.scale = 1。否则,随着用户继续捏合,大小将呈指数变化,而不是线性变化。

例如,使用.scale = 1,您的日志将类似于:

Log                       Transform Scale

                          1
Scale is ------  0.98     0.98
Scale is ------  0.99     0.97
Scale is ------  0.98     0.95
Scale is ------  0.98     0.93

使用您当前的方法(根本不会改变比例),您的日志将如下所示:

Log                       Transform Scale

                          1
Scale is ------  0.98     0.98
Scale is ------  0.92     0.90
Scale is ------  0.88     0.79
Scale is ------  0.83     0.65

这很糟糕,因为你的 View 会收缩得太快。

使用CGAffineTransformScale

CGAffineTransformScale(和其他 CGAffineTransform)不会更新框架。

来自UIView class referencetransform 属性上:

WARNING: If this property is not the identity transform, the value of the frame property is undefined and therefore should be ignored.

如果您的工具栏依赖 frame,则只需将工具栏的 frame 乘以 scale 的高度和宽度即可.

关于ios - UIPinchGestureRecognizer 调整自定义 UIView 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920195/

相关文章:

ios - 用一个 NSMutableArray 中的多个部分填充 tableview

iOS 应用程序迁移 - 将旧的 native 应用程序更新到 Cordova,迁移数据

Objective-C:具有 Split View的 UITabBarController

ios - 在 ImageView 上绘制矩形。图像未正确缩放 - iOS

ios - PDF 对于 UIWebView 来说太大了,获取文件大小? (不是尺寸)

ios - QLThumbnailProvider 扩展似乎没有被调用

iphone - 从设置加载 UIView 变换和中心会给出不同的位置

ios - KeyWindow 添加子View,没有显示在最前面

objective-c - NSDictionary 错误 - 'Count of objects differs from count of keys'

ios - Xcode 6 中的 Storyboard