2010-03-19 104 views
0

我想有一個UIView子類,它有一個邊框圖像,但我不想或不關心邊框圖像本身周圍的這個「新」邊框/邊界。UIView上的邊框圖像

我想要做的只是使用drawRect並繪製在矩形的外部,但是所有圖形都被剪切掉了,而且我沒有看到在這個上下文之外不剪切繪圖的方法。

所以現在我已經添加了一個子圖層到視圖圖層,在視圖上設置[self clipsToBounds]並覆蓋setFrame來控制我的子圖層並始終將其保持在正確的大小(溢出視圖幀40px)。

與此問題是setFrameuiview默認情況下沒有動畫,但seTFramecalayer做。

我不能只是禁用的calayerssetFrame動畫,因爲如果我要呼籲uiviewsetFrame一個uiview動畫裏面擋住calayer仍然有它的動畫禁用。

顯而易見的解決方法是查看uiview動畫上的當前animationDuration並在子圖層上設置匹配的動畫,但我不知道該值是否可用。即使是這樣,我擔心從另一個動畫中調用動畫是錯誤的。

不幸的是,最好的解決辦法是在所有不使用calayer,只是增加一個uiviewsubview並繪製成就像我拉進我的層,並希望與autoresizingMask設置爲高度和寬度,一切都會'只是工作'。對於這樣一個簡單的任務似乎是不必要的開銷。

+0

實際上無論哪種方式,都需要更多的膠水代碼才能在中間動畫時保持加蓋的圖像不被扭曲:/ – drunknbass 2010-03-19 23:05:07

+0

如果您已經得到答案,請將其標記爲已回答它給予幫助您的人的動力,您也可以upvote他們。 – 2010-03-20 04:46:13

回答

1

我的解決方案是重寫initWithFrame:添加周圍的邊框像素並在子視圖中包含內容。它可能是無用的頭頂,但肯定是「可可」路線。由於子視圖結構將允許您從邊框獨立編輯內容,因此在重繪內容時不必重繪邊框,因此最終可能會更容易。保持它們的獨立性從OOP的角度來看很有意義。

clipsToBounds路線可能是除子視圖結構之外最簡單的路線,但在一個繪圖週期和一個對象中管理邊框和內容可能會花費更多的工作量,因此值得開銷。

原諒任何輸入錯誤,從我的iPhone輸入。

+0

好吧,是啊,我只是做了一個uiimageview子視圖,並給它我的上限圖像和覆蓋主機視圖上的setFrame,現在它的一切都很好。 請打我下次我想'優化'的東西。 :d – drunknbass 2010-03-19 23:54:24