2011-11-23 96 views
2

我已經在我的CALayer的繪製代碼CALayer的重繪上旋轉

- (void) drawInContext:(CGContextRef)ctx { 
self.frame = self.superlayer.bounds; 

CGFloat height = self.bounds.size.height; 
CGFloat width = self.bounds.size.width; 

CGContextSetFillColorWithColor(ctx, [UIColor grayColor].CGColor); 

//Draw a stripe every other pixel 
int count = 0; 
while (count < height) { 
    CGContextFillRect(ctx, CGRectMake(0, count, width, 1)); 
    count=count+2; 
} 

}

基本上,在上面的圖釘條紋觀點得到了這一點。我希望它能填補這個觀點。

該視圖固定在40高和iPad的寬度。

當我旋轉時,我告訴CALayer重繪(這是另一個問題 - 我寧願它只是自動縮放到新的寬度)。

即使上面的寬度和高度的日誌輸出,它是正確的。但是當它畫在風景 - 右側有一個〜100像素的空白...

任何想法,或更好的方式來做到這一點?

+0

有趣的是,如果我以肖像開頭,我旋轉到風景和它的罰款,然後我再次旋轉肖像 - 它轉移! – bandejapaisa

回答

-1

真是浪費我的時間....我放棄了,做了一個不同的方式。核心動畫編程指南騙了我,並告訴我CALayer有一個autoResizingMask - 這可能會爲我解決這個問題。它沒有這個屬性,而不是它的iOS版本.... MacOS版本可能有它。

我放棄了在CALayer中做的事情,並在UIView的drawRect中做了同樣的事情並設置了我的UIView的autoResizingMask。

這解決了這個問題。儘管我覺得我應該在CALayer中做... ...?

1

您需要覆蓋父圖層中的layoutSublayers。或在父視圖中顯示layoutSubviews(告訴它在任何一種方法中重繪)。

+0

那麼我沒有任何麻煩告訴它重繪,因爲我在didRotateToInterface上的圖層上調用了[myLayer setNeedsDisplay] ...它只是不會重繪正確 - 即使我的日誌輸出表示幀/邊界大小是我期望他們是什麼。 – bandejapaisa

2
-(void)layoutSublayersOfLayer:(CALayer *)layer{ 
CGFloat ht = self.frame.size.height/2 - 55/2; 
arrowImage.frame = CGRectMake(self.frame.size.width-30, ht, 30.0f, 55.0f); 
} 

arrowImage is a CALayer

這非常適合我。

+0

謝謝,我會與此一起去。 – bandejapaisa