如何反转变换UIView?

Mad*_*dav 1 iphone transform uiview core-plot

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

实际上我添加的视图是垂直反转的,就像这样........

代码就像

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

我不敢玩核心图库.

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

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

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

Ken*_*ker 13

好吧,看起来核心情节视图是使用CGAffineTransform反转的.您的视图可能是从其superview继承反转.这其实很简单,

lbl.transform = CGAffineTransformMakeScale(1,-1);
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.如果你不得不多次这样做,或许用类似的东西简化它,

CGAffineTransform verticalFlip = CGAffineTransformMakeScale(1,-1);
lbl.transform = verticalFlip;
otherLbl.transform = verticalFlip;
Run Code Online (Sandbox Code Playgroud)

等等...

x轴翻转即可 CGAffineTransformMakeScale(-1,1);

  • 是的,我们这样做是为了匹配Mac和iPhone之间的绘图坐标系.如果您希望这更简单,我的建议是不要将UILabel添加到图形的CPLayerHostingView中,而是创建一个包含图形的超级视图并将UILabel添加到该图形中. (3认同)

Vla*_*mir 6

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

lbl.transform = CGAffineTransformInvert(self.view.transform);
Run Code Online (Sandbox Code Playgroud)