2010-03-19 103 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