【问题标题】:how to invert transform a UIView?如何反转转换 UIView?
【发布时间】:2009-12-11 10:08:45
【问题描述】:

我正在使用 core-plot 库在我的 iPhone 应用程序上绘制条形图,当我尝试向图表添加标签或其他一些视图时出现问题,

其实我添加的视图是垂直倒置绘制的like this ........

代码是这样的

UILabel *lbl= [[UILabel alloc] initWithFrame:CGRectMake(250, 90, 70, 25)];
    [lbl setBackgroundColor:[UIColor redColor]];
    [lbl setText:@"HELLO"];
    [self.view addSubview:lbl];
    [lbl release];

我不敢玩 core-plot 库。

那么有没有其他方法可以做正确的事情?我应该在添加视图之前进行转换吗?

如果这是解决方案,那么这将是昂贵的,因为我必须添加多个子视图。

希望每个人都清楚我的问题。

【问题讨论】:

    标签: iphone uiview transform core-plot


    【解决方案1】:

    嗯,看起来核心图视图是使用 CGAffineTransform 反转的。您的视图可能从其父视图继承了反转。 其实很简单,

    lbl.transform = CGAffineTransformMakeScale(1,-1);
    

    应该做的伎俩。 如果你必须做很多次,也许可以用类似的东西来简化它,

    CGAffineTransform verticalFlip = CGAffineTransformMakeScale(1,-1);
    lbl.transform = verticalFlip;
    otherLbl.transform = verticalFlip;
    

    等等……

    x 轴翻转是CGAffineTransformMakeScale(-1,1);

    【讨论】:

    • 太好了,我做到了...... lbl.transform = CGAffineTransformTranslate(verticalFlip,0,-300);
    • 是的,我们这样做是为了匹配 Mac 和 iPhone 之间绘图的坐标系。如果您希望这更简单,我的建议是不要将您的 UILabel 添加到图形的 CPLayerHostingView,而是创建一个包含图形的超级视图并将 UILabel 添加到其中。
    【解决方案2】:

    为避免猜测实际的变换值,您可以尝试使用CGAffineTransformInvert 函数:

    lbl.transform = CGAffineTransformInvert(self.view.transform);
    

    【讨论】:

      【解决方案3】:

      如果我们要转换一个3D模型的图层,你需要如下处理,

      斯威夫特 5:

      // To inverse the graph vertically
      annotationGraph.transform = CATransform3DMakeAffineTransform(CGAffineTransform(scaleX: 1, y: -1))
      

      否则你会收到这个,

      无法将“CGAffineTransform”类型的值分配给“CATransform3D”类型

      【讨论】:

        猜你喜欢
        • 2011-07-25
        • 1970-01-01
        • 2014-06-20
        • 2015-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多