关于展示位置和处理UILabel
以及UIImageView
,我有两个问题:
一个。我想知道是否可以在UILabel
中检测文字“边缘”的位置,以便UIImageView
向{{1}的左侧或右侧放置一定距离(具有相同的高度),例如:(UILabel
- 宽度中的某个距离 - UILabel
)。 (最好是一种可用于检测UIImageView
边缘的方法)
湾我还想知道UIImageView
和UILabel
的编程是如何工作的,我理解为创建例如UIImageView
它就像这样简单:
UIImageView
但我想知道:如果我有一种以编程方式创建 UIImageView *myImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
的方法,并根据更改的因子设置CGRect,我是否需要为每个{{1}创建一个新名称我在代码中创建,或者我可以使用相同的名称,并在每次方法运行时通过调用addSubView添加它们?如果我确实需要单独命名它们,并且我不确定我需要创建多少(因为它取决于用户),最好的方法是什么?如果我可以使用相同的名称创建它们,它们是否都会响应相同的名称?例如,如果我将myImgView设置为隐藏,这会影响名为myImgView的所有UIImageView
吗?
答案 0 :(得分:1)
您似乎是面向对象编程的新手(正如上一部分所示),我强烈建议您阅读此内容:Object-Oriented Programming with Objective-C
但我会回答你关于UIViews
的问题。 UIImageView
和UILabel
都是UIView
类的子类。 UIView
有一种特殊的变量叫做 property 。这意味着变量可以由另一个类在该类的实例上设置,然后也可以从其他类访问。 UIView
具有frame
属性,其中包含CGRect
中视图的轮廓。当你有一些像
ImageView *myImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
您正在创建UIImageView
类的实例,为其分配内存,并使用框架初始化它(在这种情况下,您使用的是高度和宽度为零的rect,这有点无用)。要将帧设置为有用的内容,请使用格式CGRectMake(originX, originY, width, height)
。请记住,在iOS上,原点位于视图的左上角,y值越高,屏幕下方的值越大。如果您需要稍后更改框架,而不是创建一个全新的实例,则可以简单地更改现有实例上的属性:
myImgView.frame = CGRectMake(10, 20, 50, 100);
//this will make the frame of myImgView to a rectangel 10 units off of the right side of the view, 20 units down from the top of the view, and have a width of 50 units and a height of 100 units
但是,您已将myImgView
声明为局部变量,这意味着您只能在声明它时声明它的函数中访问它。为了随时随地访问它,您需要将其声明为实例变量,这意味着您在.h文件中声明它。
@interface MyView : UIView {
UIImageView *myImgView;
}
@end
然后该变量可以在该类的任何地方访问。如上所示,改变其框架将改变视图中的框架。
最后,如果您需要使用它进行计算,则可以获得view
的帧。例如,您可以像myImgView
那样得到CGRect viewFrame = myImgView.frame;
CGPoint origin = myImgView.frame.origin;
CGSize width = myImgView.frame.size;
float x = myImgView.frame.origin.x;
float height = myImgView.frame.size.height;
//I think you can get it from here
的框架:
UILabels
现在使用//UILabel *myLabel has been declared either in the .h or earlier in the function
CGRect textFrame = CGRectMake(myLabel.x, myLabel.y, [myLabel.text sizeWithFont:myLabel.font].width, [myLabel.text sizeWithFont:myLabel.font].height);
,它可能有点棘手。 UILabel的框架不一定与文本占用的框架匹配。通常实际帧略小。为了获得UILabel文本的框架,请使用以下内容:
UIImageView
现在,最后,总而言之,这将是如何计算myImgView.frame = CGRectMake(myLabel.x + [myLabel.text sizeWithFont:myLabel.font].width, yOrigin, width , height);
//where myImgView is your UIImageView myLabel is your UILabel, yOrigin is the y value of the origin of the imageView, and width and height are the width and height of the image.
的新框架:
{{1}}
我希望有帮助,我强烈建议您阅读面向对象的编程指南。