2012-04-10 36 views
1

我與this guy有同樣的問題,並且提供的解決方案無法解決它(也不清楚它在另一個SO問題中解決了它)。如何在drawRect中縮放自定義繪圖:

當您更改.frame大小的UIView的,你沒有改變默認.contentMode,那麼可以肯定的是應該用的UIView的大小規模在drawRect(石英路徑)的自定義繪製?我的不是。現在我可以撥打setNeedsDisplay並重新繪製,但我正在尋找可以製作動畫的縮放。這可能嗎?

相反,對我而言,發生的事情是Quartz繪圖只是裁剪,但保持其大小。我試過直接設置contentMode以及clipsToBounds和其他實驗,但是無論我嘗試什麼,Quartz都不會自動縮放。

回答

1

必須是別的事情Here's一個簡單的演示我扔在一起來仔細檢查contentMode是否按預期工作 - 當然,當contentMode設置爲默認的「要填充的縮放比例」時,支持位圖將向上/向下縮放/ 。並且在視圖上調用setNeedsDisplay重新渲染圖像。

你對視圖做了些什麼其他的事情? (你沒有改變它的contentStretch屬性,是嗎?)你是否在做視圖的任何事情?你檢查過,視圖上的contentMode真的是UIViewContentModeScaleToFill嗎?此外,你是動畫的視圖本身,或超視圖的框架?

+0

我已經下載了您的樣品,但模擬器選項不可用它爲我在Xcode,任何想法,爲什麼?我注意到你在動畫之後是setNeedsDisplay。在做這件事之前它還沒有擴展,或者你正在做這個重畫,以便在動畫之後做出更好的解析? – johnbakers 2012-04-11 05:54:03

+0

呃,這很奇怪。我在Xcode 4.3.2中使用5.1模擬器。您可以創建一個新的ipad項目並將其拖入..和它在動畫中上下拖動。如果你註釋掉了setNeedsDisplay調用,它的停留按照框架設置放大或縮小,但是如果它被放大了,它就會變得模糊和不穩定。 – davehayden 2012-04-11 06:07:53

+0

感謝您的幫助。我的問題似乎是我在setNeedsDisplay完成之前設置了自定義視圖的框架,或者其他東西。不確定。我嘗試了一段時間,以確保視圖在縮放之前初始化,並確保它的工作。 – johnbakers 2012-04-11 06:13:02

0

,你可以嘗試覆蓋drawLayer

- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx 
{ 
    [super drawLayer:layer inContext:ctx]; 

    /*here to change self.frame 
     self.frame = CGRectMack(a, b, c, d); 
    */ 
}