我想要在后台旋转三张图像。以下是我到目前为止的情况。我想有一个类,我可以容纳所有这些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
答案 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]];