【问题标题】:Border image on UIViewUIView 上的边框图像
【发布时间】:2010-03-19 22:40:00
【问题描述】:

我想要一个有边框图像的UIView 子类,但我不想也不关心边框图像本身周围的这个“新”框架/边界。

我想要做的只是使用drawRect 并在矩形之外绘制,但所有绘图都被剪裁了,我看不到不剪裁此上下文矩形之外的绘图的方法。

所以现在我已经向视图层添加了一个子层,在视图上设置 [self clipsToBounds] 并覆盖 setFrame 以控制我的子层框架并始终保持它在适当的大小(溢出视图框架 40 像素)。

问题在于uiview 上的setFrame 默认没有动画,但calayer 上的seTFrame 有。

我不能只禁用 calayers setFrame 上的动画,因为如果我在 uiview 上调用 setFrame uiview 动画块 calayer 仍然会禁用其动画。

显而易见的解决方法是在uiview动画上查找当前的animationDuration,并在子层上设置一个匹配的动画,但我不知道这个值是否可用。而且即使是这样,恐怕从另一个动画中调用一个动画是错误的。

不幸的是,最好的解决方案是根本不使用calayer,只需添加uiview 作为subview 并像我在图层中一样绘制,并希望使用autoresizingMask 设置到高度和宽度,一切都会“正常工作”。对于这样一个简单的任务,这似乎是不必要的开销。

【问题讨论】:

  • 实际上,无论哪种方式,都需要更多的胶水代码来防止加盖的图像在动画中间被扭曲:/
  • 如果您有答案,请将其标记为已回答。它会激励帮助您的人,您也可以为他们投票。

标签: iphone animation core-animation


【解决方案1】:

我的解决方案是覆盖 initWithFrame: 以添加周围的边框像素并将内容包含在子视图中。这可能是不必要的开销,但绝对是“可可”路线。最后可能会更容易,因为子视图结构将允许您从边框单独编辑内容,因此您在重绘内容时不必重绘边框。从 OOP 的角度来看,将它们分开是很有意义的。

clipsToBounds 路由可能是除了子视图结构之外最简单的路由,但在一个绘图周期和一个对象中管理边框和内容可能需要更多的工作,因此值得付出这些开销。

请原谅任何错别字,这是从我的 iPhone 上输入的。

【讨论】:

  • 好的,是的,我刚刚制作了一个 uiimageview 子视图,并给了它我的封顶图像并覆盖了主机视图上的 setFrame,现在一切都很好。下次我想“优化”某些东西时请打我。 :D
猜你喜欢
  • 1970-01-01
  • 2015-04-27
  • 2016-06-25
  • 2013-10-02
  • 2017-12-13
  • 1970-01-01
  • 2011-12-01
  • 2013-04-16
  • 2011-01-15
相关资源
最近更新 更多