gpt4 book ai didi

iphone - ULabel 的 center 属性的值根据它绑定(bind)到的边而变化

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:10 25 4
gpt4 key购买 nike

快速版:为什么 UILabel 的“center”属性的值在其 Size 属性绑定(bind)到其父容器的顶部和底部之间发生变化,我该怎么做才能改变或者绕过这种行为?

包含详细信息的长版:我正在像这样在两个标签之间画一条线(黄线):

enter image description here

为了计算直线的终点,我使用了 UILabels 的中心属性(在这张照片中,标签表示 2.5kHz 和 20Hz),然后是标签高度的 + 或 - 一半。此技术在下面的示例/图片中效果很好。然而,在我将屏幕尺寸切换为 iPhone5(更高)的设计阶段,我通过在尺寸检查中更改它来将“20 Hz”标签绑定(bind)到底部而不是顶部,如下面两张图片所示。请注意,在这两种情况下,原点仍在左上角:

enter image description here enter image description here

这会改变 center 属性的行为方式,因此会产生以下行:

enter image description here

我在这里重新定位了 UILabel 只是为了演示。请注意,行尾应位于标签顶部的中心:

enter image description here

我打印了标签的中心点。一次绑定(bind)到顶部,然后再次绑定(bind)到底部:

绑定(bind)到顶部{290, 326.5}

绑定(bind)到底部{290, 370.5}

我尝试了一种解决方法,即使用 origin.y 并从那里进行偏移,但效果相同。

我希望它在完成后看起来像这样,但在更高的 iPhone 5 屏幕上:

enter image description here


编辑:根据@ott 的要求,添加计算直线终点的代码片段

- (void)viewDidLoad
{
[super viewDidLoad];

CGPoint begin = self.frequencyMaxLabel.center;
begin.y += self.frequencyMaxLabel.frame.size.height/2.0;

CGPoint end = self.frequencyMinLabel.center;
end.y -= self.frequencyMinLabel.frame.size.height/2.0;

// This is an object of two CGPoints to represent a line
VWWLine* frequenciesLine = [[VWWLine alloc]
initWithBegin:begin
andEnd:end];

// Pass the line to a UIView subclass where it is drawn
[self.configView setLineFrequencies:frequenciesLine];
[frequenciesLine release];

// .... other code truncated for example
}

以及画线的代码(在 UIView 子类中,来自上面代码段的 self.configView)

- (void)drawRect:(CGRect)rect
{
CGContextRef cgContext = UIGraphicsGetCurrentContext();

CGContextBeginPath(cgContext);
CGContextSetLineWidth(cgContext, 2.0f);

CGFloat yellowColor[4] = {1.0, 1.0, 0.0, 1.0};

CGContextSetStrokeColor(cgContext, yellowColor);
[self drawLineWithContext:cgContext
fromPoint:self.lineFrequencies.begin
toPoint:self.lineFrequencies.end];
CGContextStrokePath(cgContext);

//...... truncated. Draw the other lines next
}

最佳答案

在系统针对当前设备和界面方向布置您的 View 之前,您会收到 viewDidLoad 消息。将该代码移动到 viewDidLayoutSubviews

此外,您可能想查看 CAShapeLayer

关于iphone - ULabel 的 center 属性的值根据它绑定(bind)到的边而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14081299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com