0

关于放置和处理UILabel' 和UIImageView',我有两个问题:

一个。我想知道是否有可能检测到 a 中文本“边缘”的位置,UILabel以在(具有相同高度)的左侧或右侧放置UIImageView一定的距离UILabel,例如:(UILabel-certain宽度距离- UIImageView)。(最好是一种可以用来检测 a 边缘的UIImageView方法)

湾。我还想知道UILabel's 和UIImageView' 的创建如何以编程方式工作,我知道创建例如 aUIImageView它很简单:

    UIImageView *myImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];

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

4

1 回答 1

1

您似乎是面向对象编程的新手(正如最后一部分所证明的那样),我强烈建议您阅读以下内容:Object-Oriented Programming with Objective-C

但我会回答你关于UIViews. UIImageView并且UILabel都是该类的子UIView类。 UIView有一种特殊的变量,称为属性。这意味着该变量可以由另一个类在该类的实例上设置,然后也可以从其他类访问。 UIView具有frame包含视图轮廓的属性CGRect。当你有一些代码时

ImageView *myImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];

您正在创建UIImageView该类的一个实例,为其分配内存,并用一个框架对其进行初始化(在这种情况下,您使用的是高度和宽度为零的矩形,这有点没用)。为了将框架设置为有用的东西,您可以使用 format 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为局部变量,这意味着您只能在声明它的函数中访问它,在您声明它时。为了随时随地访问它,您需要将其声明为Instance Variable,这意味着您在 .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 的框架不一定与文本占用的框架匹配。通常实际框架要小一些。为了获取 UILabel 文本的框架,请使用以下内容:

//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);

现在,最后,将它们放在一起,这将是如何为您的 计算新框架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.

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

于 2013-05-21T03:03:33.267 回答