2

伸縮性を持たUIImageViewせたいイメージがあります。それを達成するために、私はで次のことを行いますviewDidLoad:

-(void) buildResizableDescriptionAreaBackground
{
    UIImage *image = [UIImage imageNamed:@"description_area_background"];
    CGFloat top = ceilf(image.size.height / 2.0) - 1;
    CGFloat bottom = floorf(image.size.height / 2.0);
    CGFloat left = ceilf(image.size.height / 2.0) - 1;
    CGFloat right = floorf(image.size.height / 2.0);
    if ([image respondsToSelector:@selector(resizableImageWithCapInsets:)])
    {
        image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, bottom, right)];
    }
    else 
    {
        image = [image stretchableImageWithLeftCapWidth:left topCapHeight:top];
    }
    [self.descriptionAreaBackgroundImage setImage:image];
    [self.descriptionAreaBackgroundImage setHighlightedImage:image];
}

これをデバッグするときdescriptionAreaBackgroundImageは、nil ではなく、非表示ではなく、alpha = 1 で、正しいフレームであることを確認します。また、画像が nil でないこと、適切なサイズであること、サイズ変更可能な画像も nil でないことを確認します。それでも、画像はUIImageViewに設定されていません。

これを行うと、viewDidAppear:すべて正常に動作します。通常の画像を設定すると(でも伸縮できませんviewDidLoad)、すべて正常に動作します。

私の知る限り、スーパービューやウィンドウを必要としないセットアップは で実行できますがviewDidLoad、なぜ機能しないのですか?

4

2 に答える 2

1

UIEdgeInsetsMake() 呼び出しが 0x0 ポイントの領域を指定しているようです。1x1 領域を指定していることを確認してください。

たとえば、伸縮可能な画像のサイズが 7x7 ピクセルで、中央のピクセルを引き伸ばすには、次のようにエッジ インセットを指定します: UIEdgeInsetsMake(3.0f, 3.0f, 3.0f, 3.0f)

于 2012-08-19T20:57:49.607 に答える
-1

OK、原因がわかりました。ばかげた間違いです。

私のviewDidLoadでは、追加のビューを含む別の.xibファイルをロードしています:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Some setups
    [[NSBundle mainBundle] loadNibNamed:@"RatingDialog" owner:self options:nil];
    // More setups...
    [self buildResizableDescriptionAreaBackground]; // NOT WORKING!!
}

どうやら、その nib の UIImageViews の 1 つが、誤って descriptionAreaBackground アウトレットにも接続されていたようです。そのため、サイズ変更可能な画像を設定すると、間違ったビューになりました...

ばかだ。

于 2012-08-20T07:55:04.897 に答える