0

インターネットの周りで、画像を引き伸ばして UIView を埋めるための次のコードに出くわしました。

UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

self.view.backgroundColor = [UIColor colorWithPatternImage:image];

これはすべて順調です。initWithCoder:しかし、サブビューとして使用されているカスタム UIView クラスで機能するようにコードを転用し、次のコードを(ビューがストーリーボードに追加されているため)次のように挿入すると思いました。

- (id)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        UIGraphicsBeginImageContext(self.frame.size);
        [[UIImage imageNamed:@"image.png"] drawInRect:self.bounds];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        self.backgroundColor = [UIColor colorWithPatternImage:image];
    }
    return self;
}

「self.view」を単に「self」に変更したのは、このコードがビュー コントローラーではなくビュー自体によって呼び出されていることを反映していることに注意してください。最初のコード サンプルはうまく機能し、ビューを大きく埋め尽くします。2番目は(ビューコントローラー ala に入れても)そうではなく、 framebounds をself.subView.frame.size正しく理解していないためだと感じています。誰かが私に簡単なクラッシュコースを教えてくれますか、または(私がベースから離れている場合)実際に何が間違っているのかを指摘できますか?

編集:今、私は本当に混乱しています。NSLog を使用して、次の情報を収集しました。

self.view.bounds.size.width: 768
self.subView.bounds.size.width: 0

...は??フレームも同様です。でも...そこにあります、寸法があります...

4

1 に答える 1

2

あなたがやりたいことを達成するためのより簡単な方法があるかもしれないと思います。私があなたを正しく理解していれば、あなたはimage.pngカスタムビューの背景画像になりたいと思っています。UIImageViewその場合は、カスタム ビューを初期化するときに を追加するだけです。

- (id) initWithCoder: (NSCoder *) coder
{
    self = [super initWithCoder: coder];
    if (self) {

        UIImageView *imageView = [[UIImageView alloc] initWithFrame: self.bounds];
        [imageView setAutoresizingMask: (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];
        [imageView setImage: [UIImage imageNamed: @"image.png"]];
        [self addSubview: imageView];
    }
    return self;
}
于 2013-07-27T23:57:14.013 に答える