旋转背景图像

时间:2013-01-10 23:02:21

标签: ios

我想要在后台旋转三张图像。以下是我到目前为止的情况。我想有一个类,我可以容纳所有这些UIImageViews并在后台随机显示它们。我读到了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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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]];