0

ビューにランダムに表示したい5つの画像があります。私のイメージ名は次のとおりです: image-0、image-1、image-2、image-3、image-4。

私が必要とするのは、各画像を表示したいということですが、問題は、2番目を表示するコードを書くと、最初の画像の上にスタックすることです。私の画像の1つを表示するコードは次のとおりです。

    - (void)viewDidLoad
{
int xValue = arc4random() % 320;
int yValue = arc4random() % 480;
image.center = CGPointMake(xValue, yValue);


{UIImageView *imgFive = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image-5.png"]];
[self.view addSubview:imgFive];
    imgFive.center = CGPointMake(xValue, yValue);}

しかし、同じコードを追加しても、「image-5.png」の代わりに他のファイル名を使用して表示しようとすると、それらは互いに重なり合ってしまいます。私の画像は円で、それぞれサイズが異なります。そのため、5 つすべてを表示しようとすると、円が最小から最大まで積み重なっていることがわかります。

これらの画像を互いに分離するにはどうすればよいですか? これらの画像を配列に入れてから、配列をループして希望どおりに表示する必要がありますか?

私はコーディングに非常に慣れていないので、コードが機能する理由を説明するのに簡単な説明が役立ちます。

再度、感謝します!

4

6 に答える 6

1

あなたの要件と、画像に提供される一般的な構造名を考慮すると、ロジックをループする必要があると思います。

for(int i=0;i<5;i++) {

    float xpos = arc4random() %320 ;
    float ypos = arc4random() %480 ;

    UIImage *image = 
     [UIImage imageNamed:[NSString stringWithFormat:@"image-%d.png",i]] ;

    UIImageView *imageView = 
     [[UIImageView alloc]initWithImage:image];

    imageView.center=CGPointMake(xpos, ypos);
    [self.view addSubview:imageView];          
}
于 2013-10-16T05:28:46.027 に答える
0

あなたが求めていることに具体的に答えるには(ただし、他の回答はコードを整理するためのより良い方法をたくさん提供します):

- (void)viewDidLoad {
float xValue = arc4random() % 320;
float yValue = arc4random() % 480;

UIImageView *imgOne = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image-1.png"]];
imgOne.center = CGPointMake(xValue, yValue);
[self.view addSubview:imgOne];

// re-randomize the location
xValue = arc4random() % 320;
yValue = arc4random() % 480;

UIImageView *imgTwo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image-2.png"]];
imgTwo.center = CGPointMake(xValue, yValue);
[self.view addSubview:imgTwo];
}

新しい画像を作成するたびに、xValue と yValue の新しい値を生成する必要があります。

于 2013-10-16T05:41:46.013 に答える
0

各 UIImageView の xValue と yValue を変更しない場合、それらの中心は整列され、互いの上に積み重ねられて表示されます。

于 2013-10-16T00:12:21.150 に答える
0

メソッド本体の開始時にxValueand を1 回だけ割り当てるため、同じ座標をすべての円に割り当てると、自然に円が互いに重なり合います (もちろん軸上)。任意の 1 つの円に center プロパティを割り当てるたびに異なる値を設定する必要があります。そうです、ループはそのための優れた戦略です。yValue(x,y)zxValueyValue

forループ構成を使用してint変数を 0 から 4 まで反復し、各反復で次のようにすることから始めるとよいでしょう。

  1. xValueと の両方に新しいランダム値を割り当てるyValue
  2. centerそれに応じて、イメージビューの1つのプロパティをそれに応じて設定します
  3. のサブビューとして追加するself.view

    - (void) viewDidLoad {
    
        int xValue, yValue;
        NSString *imageName;
        UIImageView *image;
        for (int i=0; i<5; i++) {
            imageName = [NSString stringWithFormat:@"image-%d.png", i];
            image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
            xValue = arc4random() % 320;
            yValue = arc4random() % 480;
            image.center = CGPointMake(xValue, yValue);
            [self.view addSubview:image];
        }
    
    }
    
于 2013-10-16T00:12:57.513 に答える
0

メソッドを介して画像を追加するaddSubviewと、メソッド呼び出しで画像を削除するまで画像が残るため、画像がスタックしていますremoveFromSuperview。ただし、このプロセスをもう少し堅牢にしましょう。

まず、Storyboard ファイルで、UIImageView をビューにドラッグします。寸法はお好みで設定してください。次に、アシスタント エディター (右上にある小さなタキシード アイコン) を押すと、編集中のビュー コントローラーの対応するファイルが開きます。.hビューにあるUIImageViewを取得し、CTRLを押しながら.hファイルここに画像の説明を入力にドラッグし、次のような名前を付けますimageToDisplay

手を離すと、次のようなコードが.hファイルに 表示されるはずです。@property (weak, nonatamoic) IBOutlet UIImageView *imageToDisplay; ここに画像の説明を入力

もう 1 つのプロパティ (今回は NSArray) を追加します。今回は Storyboard は必要ありません。

@property (strong, nonatomic) NSArray *imageArray;

.mファイルに戻り、メソッドでs のviewDidLoad配列を作成しましょう。UIImage

UIImage *image1 = [UIImage imageNamed:@"image-1.png"];
UIImage *image2 = [UIImage imageNamed:@"image-2.png"];
UIImage *image3 = [UIImage imageNamed:@"image-3.png"];
UIImage *image4 = [UIImage imageNamed:@"image-4.png"];
UIImage *image5 = [UIImage imageNamed:@"image-5.png"];

_imageArray = @[image1, image2, image3, image4, image5];

配列に 5 つの画像があるので、配列からランダムに画像を選択し、それをUIImageViewビューに接続されているプロパティに割り当てます。また、_imageToDisplay alphaプロパティを 0.0 に等しくして、表示される画像とその表示方法をより詳しく理解できるようにしましょう。

//Still in viewDidLoad
_imageToDisplay.alpha = 0.0;

アニメーションなどの楽しいこともできます。これを簡単にする方法を作りましょう。

-(void)displayImageRandomlyOnView {

//First, let's pick a random image to display. We will do this by generating a random number based from the count of our imageArray

NSUInteger randomIndex = arc4random_uniform([_imageArray count]);

//Now let's pick the random image with the objectAtIndex method for NSArray's. We will assign this image to our _imageToDisplay's .image property.

_imageToDisplay.image = [_imageArray objectAtIndex:randomIndex];

//Now using your original code, we can randomly define the frame of our _imageToDisplay
int xValue = arc4random() % 320;
int yValue = arc4random() % 480;

_imageToDisplay.frame = CGRectMake(xValue, yValue, CGRectGetWidth(_imageToDisplay.frame), CGRectGetHeight(_imageToDisplay.frame));

//Now if you remember, our imageToDisplay 's value is still 0.0, so let's animate it to show our randomly chosen image and location.

    [UIView animateWithDuration:1.0 animations:^ {
        _imageToDisplay.alpha = 1.0;
    }];
}

.hこれは、コードがファイルにどのように表示されるかです。

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIImageView *imageToDisplay;
@property (strong, nonatomic) NSArray *imageArray;
@end

.mこれは、すべてのコードがファイルにどのように表示されるかです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UIImage *image1 = [UIImage imageNamed:@"image-1.png"];
    UIImage *image2 = [UIImage imageNamed:@"image-2.png"];
    UIImage *image3 = [UIImage imageNamed:@"image-3.png"];
    UIImage *image4 = [UIImage imageNamed:@"image-4.png"];
    UIImage *image5 = [UIImage imageNamed:@"image-5.png"];

    _imageArray = @[image1, image2, image3, image4, image5];
    _imageToDisplay.alpha = 0.0;
}

-(void)displayImageRandomlyOnView {

    //First, let's pick a random image to display. We will do this by generating a random number based from the count of our imageArray

    NSUInteger randomIndex = arc4random_uniform([_imageArray count]);

    //Now let's pick the random image with the objectAtIndex method for NSArray's. We will assign this image to our _imageToDisplay's .image property.

    _imageToDisplay.image = [_imageArray objectAtIndex:randomIndex];

    //Now using your original code, we can randomly define the frame of our _imageToDisplay
    int xValue = arc4random() % 320;
    int yValue = arc4random() % 480;

    _imageToDisplay.frame = CGRectMake(xValue, yValue, CGRectGetWidth(_imageToDisplay.frame), CGRectGetHeight(_imageToDisplay.frame));

    //Now if you remember, our imageToDisplay 's value is still 0.0, so let's animate it to show our randomly chosen image and location.

    [UIView animateWithDuration:1.0 animations:^ {
        _imageToDisplay.alpha = 1.0;
    }];
}

このメソッドを実行するたびに、ランダムに選択された画像とランダムな位置が表示されます。ランダムな値をいじって、画像がビューの境界内に留まるようにします。

さらに、課題として、このメソッドをUIButtonビューに接続して、ボタンを押すたびに、作成したメソッド-(void)displayImageRandomlyOnViewが呼び出されて画像が変更されるようにしてください。

さらに説明が必要な場合はお知らせください。

于 2013-10-16T00:50:14.293 に答える
0
 NSDictionary *picturesDictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"PhotesArray" ofType:@"plist"]];
NSArray *imageNames = [picturesDictionary objectForKey:@"Photos"];
NSMutableArray *images = [[NSMutableArray alloc] init];
for (int i=0; i<[imageNames count]; i++) {
    [images addObject:[UIImage imageNamed:[imageNames objectAtIndex:i]]];
}
//Normal animation
self.dataImageView.animationImages = images;
self.dataImageView.animationDuration = 5.0;
[self.dataImageView startAnimating];
于 2015-12-08T08:57:21.723 に答える