1

サブビュー(写真)が追加された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];

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

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

    }

}

質問 2: UIImageWriteToSavedPhotosAlbum が失敗するのはなぜですか?

4

2 に答える 2

0
  1. 試す UIView* targetView = [self hitTest:location withEvent:nil];
于 2009-04-30T21:15:46.090 に答える