6263


for文でランダムな位置に作成した複数のImageViewが重なった場合、重なったImageViewだけを削除したいのですが、tagをつけたり配列に格納したりしてみましたが、うまく動作しません  
どうすればよいかわからないので質問させていただきました。

[code]

    -(void)displayImages
    {
        int total = 5;
    
        for (int i=0; i<total; i++) {
            UIImageView *holeImageView;
            int randOx = 10+arc4random_uniform(240);
            int randOy = 60+arc4random_uniform(430);
            NSInteger tag = i;
    
            holeImageView = [UIImageView new];
            holeImageView.frame = CGRectMake(randOx,randOy,40,40);
            holeImageView.image = [UIImage imageNamed:@"startButton.png"];
            [self.view addSubview:holeImageView];
            [holeImageView setTag:tag];
            [ObjectArray addObject:holeImageView];
    
            if (CGRectIntersectsRect (holeImageView.frame,holeImageView.frame)){
                NSLog(@"%dぶつかりました",i);
                [ObjectArray removeObject:holeImageView];  
            }
        }         
    }
    
[/code]

追記させていただきます

[code]

           if (CGRectIntersectsRect (ObjectArray[i].frame,holeImageView.frame)){
           if (CGRectIntersectsRect (holeImageView[i].frame,holeImageView.frame)){
    
[/code]

など他にも思いつくものは試しましたがエラー出ましたので、こちらにどのように記述すれば良いかお聞きしたかったのですが、質問文の書き方が悪く、大変申し訳ないです。


CC BY-SA 3.0
2015-02-10T09:57:10.583
6260
2015-02-10T11:06:11.340
2015-02-10T10:52:20.593
5967
5967
question
objective-c
CGRectIntersectsRectで指定する方法


どう見てもAとBの重なりを判定する関数の引数A,Bに同じものを渡していますが・・・

> if (CGRectIntersectsRect (holeImageView.frame,holeImageView.frame)){

人に聞くより自分でコードをじっくりながめた方が早いですよ。


CC BY-SA 3.0
2015-02-10T10:40:20.550
6262
2015-02-10T10:40:20.550
5005
6260
answer


UIViewのプロパティに「subviews」があって、これで「addSubview:」したサブビューの一覧をNSArrayで取得できます。提示のプログラムに即して説明すれば、「
**self.view.subviews** 」になります。  
この配列を使って、総当たりで重なっているかどうかの判定をすればいいでしょう。  
（たぶん、subviewsを利用すれば、「ObjectArray」は不用になる気がします。）

どういうジャンルのアプリを開発なさっているのかによりますが、視覚的に派手なものを求めるのなら、UIDynamicBehaviorの活用をお勧めします。

例：[UIKit Dynamicsを使ってみるチュートリアル](http://safx-dev.blogspot.jp/2014/01/uikit-
dynamics.html)

このクラスは、Viewに物理的なマスを与えるもので、同じ平面にあるViewは重なり合うことがありません。（リンク先のサンプルでは、Viewが重力で落下しますが、重力をなしに設定することもできます）  
ちょっと勉強が必要ですが、勉強の量に比例する、アプリのできばえを期待できます。


CC BY-SA 3.0
2015-02-10T11:06:11.340
6263
2015-02-10T11:06:11.340
7362
6260
answer