0

新しいサブビューを追加しています

 self.editView = [[EditView alloc] initWithFrame:CGRectMake(0,0,320,296) WithImageView:self.mainImageView.image];
            self.mainImageView.hidden=YES;
            [self.view addSubview:self.editView];

新しいビューは次のとおりです。

- (id)initWithFrame:(CGRect)frame WithImageView: (UIImage *) image
{
self = [super initWithFrame:frame];
if (self) {
    self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    self.rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotation:)];
    self.pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
    self.tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];


    self.panRecognizer.cancelsTouchesInView = NO;
    self.panRecognizer.delegate = self;
    [self.frameView addGestureRecognizer:self.panRecognizer];
    self.rotationRecognizer.cancelsTouchesInView = NO;
    self.rotationRecognizer.delegate = self;
    [self.frameView addGestureRecognizer:self.rotationRecognizer];
    self.pinchRecognizer.cancelsTouchesInView = NO;
    self.pinchRecognizer.delegate = self;
    [self.frameView addGestureRecognizer:self.pinchRecognizer];
    self.tapRecognizer.numberOfTapsRequired = 2;
    [self.frameView addGestureRecognizer:self.tapRecognizer];

    [self updateCropRect];

    [self reset:NO];

    self.retainedImage = image;

    self.sourceImage = image;
    self.imageView.image = self.previewImage;

    if(self.previewImage != self.sourceImage) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            CGImageRef hiresCGImage = NULL;
            CGFloat aspect = self.sourceImage.size.height/self.sourceImage.size.width;
            CGSize size;
            if(aspect >= 1.0) { //square or portrait
                size = CGSizeMake(kMaxUIImageSize*aspect,kMaxUIImageSize);
            } else { // landscape
                size = CGSizeMake(kMaxUIImageSize,kMaxUIImageSize*aspect);
            }
            hiresCGImage = [self newScaledImage:self.sourceImage.CGImage withOrientation:self.sourceImage.imageOrientation toSize:size withQuality:kCGInterpolationDefault];

          //  dispatch_async(dispatch_get_main_queue(), ^{
                self.imageView.image = [UIImage imageWithCGImage:hiresCGImage scale:1.0 orientation:UIImageOrientationUp];
                CGImageRelease(hiresCGImage);
          //  });
        });
    }


}
return self;
}

また、画像用のカスタム セッター メソッドもあります。

- (UIImage *)previewImage
{
if(_previewImage == nil && _sourceImage != nil) {
    if(self.sourceImage.size.height > kMaxUIImageSize || self.sourceImage.size.width > kMaxUIImageSize) {
        CGFloat aspect = self.sourceImage.size.height/self.sourceImage.size.width;
        CGSize size;
        if(aspect >= 1.0) { //square or portrait
            size = CGSizeMake(kPreviewImageSize,kPreviewImageSize*aspect);
        } else { // landscape
            size = CGSizeMake(kPreviewImageSize,kPreviewImageSize*aspect);
        }
        _previewImage = [self scaledImage:self.sourceImage  toSize:size withQuality:kCGInterpolationLow];
    } else {
        //self.previewImage = [self.sourceImage retain];
        _previewImage = self.retainedImage;
    }
}
return  _previewImage;

}

サブビューに画像を読み込めません。プロパティがinitで設定されないことを理解しています。しかし、どうすれば設定できますか。別のプロパティを使用してみました。

これはここにあるカスタムライブラリです

4

1 に答える 1

1

オブジェクトのプロパティは、オブジェクトの作成時に nil に設定されます。プロパティを他の値に変更する場合は、任意のメソッドで設定できます。

画像が表示されなかった理由は多数考えられます。

  1. self.imageView は nil です
  2. self.imageView.image は nil です
  3. self.imageView のサイズは 0 です
  4. self.imageView は非表示です
  5. self.imageView はどのビューにも添付されていません
  6. self.imageView は他のビューによって隠されています

あなたの説明から、どちらがその背後にある理由であるかを判断するのは困難です.

于 2013-03-08T03:20:09.527 に答える