2013-01-10 186 views
1

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

因此,我用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 
+0

“只需要一帧。” - 你期望一个观点有多个框架?或者是什么? – 2013-01-10 23:15:59

+1

在后台只有一个UIImageView,并在UIImageView的图像(UIImage)属性上进行切换。 –

+0

凯恩,我可以在哪里阅读以了解您推荐的内容?谢谢! – user1968349

回答

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; 
+0

嗨,他,我在哪里可以阅读以了解如何更改UIImageView的UIImage属性?谢谢! – user1968349

+0

在[apple docs](https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIImageView_Class/Reference/Reference.html) – foundry

+0

@ user1968349 - 查看我更新的答案。这是清楚的吗?如果是这样,请接受答案(勾选) – foundry

0

在你的方法,你已经创建了6个对象 - 3个UIImages和3个UIImageViews的。

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

我建议首先创建,只有一个的UIImageView:

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

跟着三个UIImages并将它们放置在一个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]; 

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

NSUInteger index = arc4random() % [imagesArray count]; 
[backgroundImage setImage:[imagesArray objectAtIndex:index]]; 
+0

这并不会在每次IBAction发生时更改背景图像。 – user1968349

+0

代码似乎从我的结束,也许错误是在执行?确保backgroundImage是您班级的IVAR。 – achi

+0

嗨Eli,我在哪里称视图? – user1968349