[英]Mask arbitrarily sized UIImageView with resizable UIImage mask
[英]Setting resizable UIImage to a UIImageView at viewDidLoad is ignored
我有一個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且框架正確。 另外,我還要確保圖像不為零,具有正確的大小以及可調整大小的圖像也不為零。 但是,該圖像未設置為UIImageView。
如果我在viewDidAppear:
執行此操作viewDidAppear:
一切正常。 如果我設置常規圖像(即使在viewDidLoad
也不可拉伸),則一切正常。
據我所知,任何不需要superview或window的設置都可以在viewDidLoad
上完成,為什么它不起作用?
看起來您的UIEdgeInsetsMake()調用正在指定0x0點的區域。 嘗試確保指定1x1區域。
例如,您的可拉伸圖像的大小為7x7像素,並且您想拉伸中心像素,則可以像這樣指定邊緣插入:UIEdgeInsetsMake(3.0f,3.0f,3.0f,3.0f)
好吧,我找到了導致它的原因,這是愚蠢的錯誤。
在我的viewDidLoad中,我正在加載另一個包含其他視圖的.xib文件:
- (void)viewDidLoad
{
[super viewDidLoad];
// Some setups
[[NSBundle mainBundle] loadNibNamed:@"RatingDialog" owner:self options:nil];
// More setups...
[self buildResizableDescriptionAreaBackground]; // NOT WORKING!!
}
顯然,該筆尖中的UIImageViews之一也錯誤地連接到我的descriptionAreaBackground插座。 因此,當我設置可調整大小的圖像時,它的視圖不正確...
真蠢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.