2012-03-27 63 views
1

我想重用自定義按鈕類中的一小塊代碼。爲此,我需要傳遞不可拉伸的圖像(圖標)或可伸縮圖像('旋風')。在代碼中,我需要設置矩形來繪製高度,所以我想,理想情況下,只需確定圖像是否可拉伸?如果不是我畫的大小的圖像,如果沒有我畫在包含矩形的邊界。是否可以確定UIImage是否可伸縮?

從我調查到目前爲止capInsets(iOS 5)或leftCapWidth/topCapHeight(iOS 5之前)沒有用。

有什麼東西埋在覈心或石英信息我可以使用?

只是好奇,現在我用一個額外的參數編碼。

**我因爲通過CGImageRef讀取和CI相當於**已經

據我可以告訴有,我們可以訪問,以確定這些圖像沒有這樣的信息,這引出瞭如何做的問題OS知道嗎?

回答

1

沒有辦法檢測到這一點,除非你有一些強烈的圖像分析(這將不是100%正確的)。 UIImage本質上是一些帶有元信息的像素,全部都是從你加載的文件中獲得的。沒有文件格式會有這些信息。

但是,您可以將一些信息編碼到圖像的文件名中。如果你有一個名爲foo.png的圖像是可伸縮的,爲什麼不把它稱爲foo.stretch.png?您的加載例程可以分析文件名並提取可以與UIImage關聯的元信息(請參閱http://labs.vectorform.com/2011/07/objective-c-associated-objects/以獲取關聯對象),或者創建自己的將UIImage與元信息組合在一起的類。

祝你好運。

+0

我已經被告知,在android中它是通常表示圖像的子類。格兒。 :P通過在UIView子類中設置一個布爾可拉伸屬性來編寫代碼很容易,我使用該子類在按鈕內呈現,然後在setter和drawRect例程中檢查它。所以這是一個我已經在技術上解決的問題。我只是好奇而已。 – Diziet 2012-03-27 15:35:25

0

當你創建UIImage *時,它的.size屬性是絕對的。 如果你的意思是可拉伸到你的按鈕視圖。例如檢查比例。

- (BOOL) stretchableImage:(UIImage*)aImage toView:(UIView*)aView{ 
    CGFloat scaleW = aView.size.width/aImage.size.width; 
    CGFloat scaleH = aView.size.height/aImage.size.height; 

    if (scaleW == scaleH){ 
     if (scaleW < 1) 
      return YES; 
    } 

    return NO; 
} 
+0

這對我不起作用。它是由stretchableImageWithLeftCapWidth/resizableImageWithCapInsets定義的圖像。所以它總是比包含矩形的小。 – Diziet 2012-03-27 15:37:07