0

我在不使用界面生成器的情况下创建了多个图像。我使用了这段代码:

for (Row* row in parser.rows) {
        CGRect IphoneFrameImageRect;
        IphoneFrameImageRect = CGRectMake(10, 10, 150.0f, 150.0f);
        UIImageView *IphoneFrame = [[UIImageView alloc] initWithFrame:IphoneFrameImageRect];
        NSString *IphoneFrameurl = [NSString stringWithFormat:@"http://some.url.com/iphone/IphoneFrame.png"];
        [IphoneFrame setImage:[UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:IphoneFrameurl]]]];
        [IphoneFrame setTag:(i)];
        IphoneFrame.opaque = YES; // explicitly opaque for performance

        [self.view addSubview:IphoneFrame];
        [IphoneFrame release];
}

我需要在横向模式下将这些图像移动到不同的位置。我确实标记了每个图像,看起来我可以使用此标记选择图像。但是我怎样才能给图像一个新的坐标呢?我有这个代码:

-(void)positionViews {
    UIInterfaceOrientation destOrientation = self.interfaceOrientation;

    int i=4; //Picture with tag=4 for example
    UIImage *tempImage=(UIImage *)[self.view viewWithTag:(i)];

    // HOW TO MOVE ??

}

我可以使用以下代码通过按钮执行此操作:

UIButton *tempButton=(UIButton *)[self.view viewWithTag:i];
[temp setFrame:CGRectMake(x, y, X10ButtonWidth, X10ButtonHeight)];
4

1 回答 1

0

您正在混淆两种不同的事物/类:

  • UIImage表示图像数据及其像素在内存中
  • UIImageView表示在屏幕上显示图像的视图。

如果您更清楚,anUIImage就是. 表示数据/内容的对象与可以在屏幕上显示它的视图不同。UIImageViewNSStringUILabel

因此,当您想使用您设置的标签检索您的 imageview 时,您检索一个view,尤其是UIImageView重要的一个,而不是一个UIImage.


将您的演员更改为UIImageView,您将能够以与您setFrame:相同的方式调用它UIButton(作为类setFrame:的方法UIView,并且两者都是UIImageViewUIButton的子类UIView)。

UIImageView *tempImageView = (UIImageView *)[self.view viewWithTag:(i)];
[tempImageView setFrame:...];

或者甚至不做任何转换,因为viewWithTag:返回 a UIView,如果您只想更改框架,这就是您所需要的:如果您只想更改属性,无论是基本视图UIView还是特别是 aUIImageView或任何类型的视图都无关紧要,frame因为这是泛型UIView类的一个属性,可以应用于UIView任何特定的子类UIView

UIView *tempImageView = [self.view viewWithTag:(i)];
[tempImageView setFrame:...];
于 2012-10-10T09:33:49.163 回答