0

mjpeg-iphoneからダウンロードした MjpegView があります(mjpeg-iphone プロジェクトでは、MJPEGClient という名前が付けられています。機能を理解しやすくするために、名前を MjpegView に変更しました)。

基本的に、MjpegView は UIImageView の拡張であり、NSUrlConnection を使用して URL から mjpeg 画像を取得します。MjpegViewにUITapGestureRecognizerを追加したのですが、タップしても反応しません。

MjpegView のコード スニペットは次のとおりです。

@interface MjpegView : UIImageView
@end

@implementation MjpegView

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];

    if (self) {

        if (_endMarkerData == nil) {
            uint8_t endMarker[2] = END_MARKER_BYTES;
            _endMarkerData = [[NSData alloc] initWithBytes:endMarker length:2];
        }

        self.contentMode = UIViewContentModeScaleAspectFit;

        singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSingleTap:)];
        singleTapRecognizer.numberOfTapsRequired = 1;
        singleTapRecognizer.numberOfTouchesRequired = 1;

        [self addGestureRecognizer:singleTapRecognizer];

       [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:_url] delegate:self];
    }

    return self;
}


#pragma mark - NSURLConnection Delegate Methods

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    //NSLog(@"didReceiveResponse");

    if (_receivedData) {
        [_receivedData release];
    }

    _receivedData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    //NSLog(@"didReceiveData");

    [_receivedData appendData:data];

    NSRange endRange = [_receivedData rangeOfData:_endMarkerData 
                                          options:0 
                                            range:NSMakeRange(0, _receivedData.length)];

    long long endLocation = endRange.location + endRange.length;
    if (_receivedData.length >= endLocation) {
        NSData *imageData = [_receivedData subdataWithRange:NSMakeRange(0, endLocation)];
        UIImage *receivedImage = [UIImage imageWithData:imageData];
        if (receivedImage) {
            self.image = receivedImage;
        }
    }
}

@end

これは、メイン スレッドが mpjeg 画像でビューを更新するのに忙しく、タップを検出できないためだと思われます。これを実装する方法について誰か提案がありますか?

4

1 に答える 1

0

デフォルトでは、 UIImageViewhasuserInteractionEnabledは false

プロパティを設定するuserInteractionEnabled= YES

これを試して、

@implementation MjpegView

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];

    if (self) {

        if (_endMarkerData == nil) {
            uint8_t endMarker[2] = END_MARKER_BYTES;
            _endMarkerData = [[NSData alloc] initWithBytes:endMarker length:2];
        }

        self.contentMode = UIViewContentModeScaleAspectFit;
        self.userInteractionEnabled=YES;

        singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSingleTap:)];
        singleTapRecognizer.numberOfTapsRequired = 1;
        singleTapRecognizer.numberOfTouchesRequired = 1;

        [self addGestureRecognizer:singleTapRecognizer];

       [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:_url] delegate:self];
    }

    return self;
}
于 2013-08-06T04:08:22.190 に答える