关于UILabel和UIImageView放置处理的几个问题?

时间:2013-05-20 23:37:18

标签: iphone ios uiimageview uilabel

关于展示位置和处理UILabel以及UIImageView,我有两个问题:

一个。我想知道是否可以在UILabel中检测文字“边缘”的位置,以便UIImageView向{{1}的左侧或右侧放置一定距离(具有相同的高度),例如:(UILabel - 宽度中的某个距离 - UILabel)。 (最好是一种可用于检测UIImageView边缘的方法)

湾我还想知道UIImageViewUILabel的编程是如何工作的,我理解为创建例如UIImageView它就像这样简单:

UIImageView

但我想知道:如果我有一种以编程方式创建 UIImageView *myImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; 的方法,并根据更改的因子设置CGRect,我是否需要为每个{{1}创建一个新名称我在代码中创建,或者我可以使用相同的名称,并在每次方法运行时通过调用addSubView添加它们?如果我确实需要单独命名它们,并且我不确定我需要创建多少(因为它取决于用户),最好的方法是什么?如果我可以使用相同的名称创建它们,它们是否都会响应相同的名称?例如,如果我将myImgView设置为隐藏,这会影响名为myImgView的所有UIImageView吗?

1 个答案:

答案 0 :(得分:1)

您似乎是面向对象编程的新手(正如上一部分所示),我强烈建议您阅读此内容:Object-Oriented Programming with Objective-C

但我会回答你关于UIViews的问题。 UIImageViewUILabel都是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}}

我希望有帮助,我强烈建议您阅读面向对象的编程指南。