1

我有三个要在背景中旋转的图像。以下是我到目前为止所拥有的。我想要一个可以容纳所有这些 UIImageViews 并在后台随机显示它们的类。我阅读了 UIView 和 frame 方法,但我不知道如何添加它们,因为它只需要一帧。

因此,我使用 NSArray 来保存所有对象。现在唯一的问题是当新背景出现时,旧背景并没有消失。现在我要删除旧背景吗?

如果有人能指出我正确的方向,那就太好了。

谢谢!

@interface ViewController : UIViewController

@property (strong, nonatomic) NSArray *imageArray;
@property (strong, nonatomic) UIImageView *imageView;

- (IBAction)buttonPressed:(UIButton *)sender;

@end

// .m 文件

@implementation ViewController
@synthesize imageArray;
@synthesize imageView;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    imageView = [[UIImageView alloc] init];

    UIImage *image1 = [UIImage imageNamed:@"image1.png"];
    UIImage *image2 = [UIImage imageNamed:@"image2.png"];
    UIImage *image3 = [UIImage imageNamed:@"image3.png"];

    imageArray = [[NSArray alloc] initWithObjects:image1, image2, image3, nil];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)buttonPressed:(UIButton *)sender {

    NSUInteger index = arc4random_uniform(self.imageArray.count);
    [imageView setImage:[imageArray objectAtIndex:index]];

}
@end
4

2 回答 2

0

在您的方法中,您创建了 6 个对象 - 3 个 UIImages 和 3 个 UIImageViews。

你想要的可以使用 4 个对象而不是 6 个对象来完成,使用更少的内存,让你的应用程序运行得更快,同时回答你的问题(另外,我假设你有所有相同大小的背景图像,大小设备的屏幕)。

我建议先创建一个 UIImageView:

//backgroundImage is an IVAR
backgroundImage = [[UIImageView alloc] init];

后跟三个 UIImage 并将它们放在一个 NSArray 中:

UIImage *image1 = [UIImage imageNamed:@"image1.png"];
UIImage *image2 = [UIImage imageNamed:@"image2.png"];
UIImage *image3 = [UIImage imageNamed:@"image3.png"];
//imagesArray is an IVAR
imagesArray = [[NSArray alloc]] initWithObjects: image1, image2, image3, nil];

最后,要更改背景,调用 random 函数并更新 UIImageView 图像属性,而不是在视图堆栈顶部弹出不同的视图:

NSUInteger index = arc4random() % [imagesArray count];
[backgroundImage setImage:[imagesArray objectAtIndex:index]];
于 2013-01-10T23:51:28.883 回答
0

这个:

[self.view insertSubview:current atIndex:0];

正在将另一个视图添加到您的视图层次结构中,但您不会删除之前放置的视图。所以你有一个不断增长的 UIVews 堆栈。您还将新视图放置在堆栈的底部。

尝试

[[[self.view subviews] objectAtIndex:[[self.view subviews] count]-1] removeFromSuperview];
[self.view addSubview:current];

或者更好 - 正如@Kaan 建议的那样 - 有一个 UIImageView 并简单地更改它的 UIImage 属性。

为此,您的数组将包含您的 UIImages 而不是您的 UIImageviews。

您的 UIView 可以UIImageview,也可以包含UIImageview。

UIImageview 有一个可以设置的图像属性。

你的代码看起来像这样......

self.imageArray = [[NSArray alloc] initWithObjects:image1, image2, image3, nil];
NSUInteger index = arc4random_uniform(self.imageArray.count);
UIImage *current;
current = [self.imageArray objectAtIndex:index];
self.imageview.image = current;
于 2013-01-10T23:33:19.730 回答