0

我有 5 张图像要随机显示在视图上。我的图像名称如下:image-0、image-1、image-2、image-3、image-4。

我需要的是我想显示每个图像,但问题是当我编写代码以显示第二个图像时,它会堆叠在第一个图像的顶部。这是显示我的一张图片的代码:

    - (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

您的图像是堆叠的,因为当您通过该方法添加图像时addSubview,它将一直存在,直到您使用该方法调用删除该图像removeFromSuperview。但是,让我们让这个过程更加健壮一些。

首先,在您的 Storyboard 文件中,将 UIImageView 拖到您的视图中。将其尺寸设置为您的 likieng。然后按下助手编辑器(右上角的小燕尾服图标),它应该打开您正在编辑的视图控制器的相应.h文件。取你在视图上的 UIImageView,按住 CTRL 并拖到你的.h文件在此处输入图像描述上,给它起一个名字imageToDisplay

当您放手时,您应该会在.h文件中看到如下代码: @property (weak, nonatamoic) IBOutlet UIImageView *imageToDisplay; 在此处输入图像描述

再添加一个属性,这次是 NSArray,这一次你不需要 Storyboard:

@property (strong, nonatomic) NSArray *imageArray;

现在回到您的.m文件中,在您的viewDidLoad方法中,让我们创建一个UIImages 数组:

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视图中的 a,并使其每次按下按钮时,-(void)displayImageRandomlyOnView都会调用我们创建的方法并更改您的图像。

如果您需要更多说明,请告诉我!

于 2013-10-16T00:50:14.293 回答
0

如果您不更改每个 UIImageView 的 xValue 和 yValue,它们的中心将对齐并且会显示为彼此堆叠。

于 2013-10-16T00:12:21.150 回答
0

您只在方法主体的开头分配xValueandyValue一次,因此(x,y)为所有圆分配相同的坐标自然会使它们彼此堆叠(z当然在轴上)。每次在任何一个圆圈上分配中心属性时,您都需要有不同的值xValue,是的,循环是一个很好的策略。yValue

一个好的开始是使用for循环结构来迭代一个int从 0 到 4 的变量,并且在每次迭代中:

  1. 为两者分配新的随机值xValueyValue
  2. 相应地设置center您的图像视图之一的属性
  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
 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 回答