2009-04-30 8 views
1

サブビュー(写真)が追加されたUIScrollViewがあります。ユーザがスクロールビュー内のピクチャに触れるたびに、それはその上のチェックマークをトグルする。UiScrollViewでどのサブビューに触れても、他の機能ではそれにアクセスできないサブビューをキャプチャしました。

NSMutableIndexSet * picturesArray; < - .H

- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event { 
if (!self.dragging) { 
    [self.nextResponder touchesEnded: touches withEvent:event]; 
    NSLog(@"Touch down"); 
    for (UITouch *touch in touches) { 

     for (int i = 1; i <= [self subviews].count; i++) 
     { 


     if(CGRectContainsPoint([[self viewWithTag:i]frame], [touch locationInView:self])){  
      NSLog(@"touched %d th view",i); 

      NSArray *subviews = [[self viewWithTag:i] subviews]; 
      UIImageView *view = nil; 

      view = [subviews objectAtIndex:0]; 

       if(view.hidden){ 
        // add the index 
        [picturesArray addIndex:i]; 
        view.hidden = NO; //check mark is shown 
       }else{ 
        [picturesArray removeIndex:i]; 
        view.hidden = YES; //check mark is not shown 
       } 



      // UIImageWriteToSavedPhotosAlbum([(UIImageView *)[self viewWithTag:i]image], nil, nil, nil); <- WORKS IF CALLED 

      } 

     } 
    } 

} 

質問1で宣言された:これは、これを行うための最善の方法は何ですか? for(int i = 1; i < = [self subviews] .count; i ++)を使うのはかなり遅いです。私は基本的にどのサブビューに触れたのかをキャプチャする必要があります。私は各サブビューを通過する以外のことを理解していません

savePhotosが呼び出され、基本的にどちらの画像がタッチされて検索され、フォトアルバムに保存されます。ただし、UIImageWriteToSavedPhotosAlbumへの呼び出しは失敗します。これはTouchesEndedと同じファイルにあります。しかし、TouchesEndedで呼び出されたときに動作します。

  • (IBAction)savePhotos:(ID)、送信者{

    のNSLog( "インデックスセットは%@である" @、picturesArray)。

    const NSUInteger arrayCount = picturesArray.count;

    NSUInteger * theIndexBuffer =(NSUInteger *)calloc(picturesArray.count、sizeof(NSUInteger));UIImageWriteToSavedPhotosAlbum([(UIImageView *)[self viewWithTag:0] image]、nil、nil、nil);

    [picturesArray getIndexes:theIndexBuffer maxCount:arrayCount inIndexRange:nil];なぜそれがUIImageWriteToSavedPhotosAlbumが故障していることである:{

    NSLog(@"Element is %d",theIndexBuffer[i]);  
        UIImageWriteToSavedPhotosAlbum([(UIImageView *)[self viewWithTag:i]image], nil, nil, nil); <- THIS CRASHES 
    

    }

}

質問2(; I < arrayCount I ++は、I = 0をINT)ため

答えて

2

1)UIImageViewを使用する代わりに、UIImageViewの子を実装します。その後

2)何かが自動解放、ダブルはあなたの参照カウントが正しいおそらくなっているチェックです

+0

あなたのお返事ありがとうSLF! UiImageViewの子を含意することで何を意味するのでしょうか? autoReleaseの場合 [(UIImageView *)[self viewWithTag:i] image]は基本的にNULLです。自己viewwithTag:私は自動リリースされていますか? – user82383

0
  1. してみてください、あなたのO(n)の問題を解決しなければならないこと、個々のサブビューに触れるために聞いてみてくださいUIView* targetView = [self hitTest:location withEvent:nil];
関連する問題