1

バックグラウンドで回転させたい3つの画像があります。以下は私がこれまでに持っているものです。これらすべての UIImageViews を保持し、バックグラウンドでランダムに表示できるクラスが必要です。UIView とフレーム メソッドについて読みましたが、1 つのフレームしか取り込めないため、それらを追加する方法がわかりません。

したがって、代わりに 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

これ:

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

ビュー階層に別のビューを追加していますが、以前に配置したビューを削除していません。つまり、UIVewのスタックは増え続けています。また、スタックの一番下に新しいビューを配置しています。

試す

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

または、@ Kaanが示唆しているように、単一のUIImageViewを持ち、そのUIImageプロパティを変更するだけです。

これを行うには、配列にUIImageviewsではなくUIImagesが含まれます。

UIViewはUIImageviewにすることも、UIImageviewを含めることもできます。

UIImageviewには、設定可能なimageプロパティがあります。

コードは次のようになります...

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 に答える
0

あなたのアプローチでは、3 つの UIImages と 3 つの UIImageViews の 6 つのオブジェクトを作成しました。

あなたが望むことは、6つではなく4つのオブジェクトを使用して達成でき、メモリを少なくして、アプリをより速く実行し、同時に質問に答えることができます(また、すべて同じサイズの背景画像、サイズデバイスの画面の)。

最初に UIImageView を 1 つだけ作成することをお勧めします。

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

3 つの 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 に答える