【发布时间】:2015-03-01 02:53:21
【问题描述】:
我正在尝试在UINavigationBar 中添加“基于饼图的倒数计时器视图”。
UIView 子类(巧妙地称为ProgressView)在添加到标准UIView 时可以正常工作。
但是,当我尝试将它用作 UIBarButtonItem 中的 UINavigationBar/UINavigationItem 的自定义视图时,事情变得有些不稳定。
原因是,当计时器倒计时结束时,视图会变成一个绿色圆圈,该圆圈缩小为一个绿点以不那么突兀。
我正在像这样初始化自定义UIBarButtonItem:
self.progressView = [[ProgressView alloc] initWithFrame:CGRectMake(0, 0, 36, 36)];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.progressView];
这是在计时器结束时运行的代码:
[UIView animateWithDuration:1.0f
delay:1.0f
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
self.transform = CGAffineTransformScale(self.transform, 0.25f, 0.25f);
}
completion:nil];
我是否使用这个似乎并不重要:
self.transform = CGAffineTransformScale(self.transform, 0.25f, 0.25f);
或者这个:
self.transform = CGAffineTransformMakeScale(0.25f, 0.25f);
当我通过覆盖 -(void)setFrame:(CGRect)frame 访问器来监视自定义视图的 frame 属性时,我得到以下输出(在 iPhone 6 Plus 上测试):
frame: {{0, 0}, {0, 0}}
frame: {{0, 0}, {36, 36}}
frame: {{358, 4}, {36, 36}} // <-- This displays 3 times for some reason
frame: {{385, 17}, {9, 9}}
现在,很明显,帧宽度的减少(减少 27 个点)导致 UINavigationBar/UINavigationItem 将整个视图向右移动,以在右侧边缘保持一些缓冲区屏幕。我的计算似乎表明它保持了 20 点缓冲区。
如何在不改变框架的情况下为 UIView 的“缩小”设置动画?绘图是如此基本(此时它只是一个绿点),如果有某种方法可以做到这一点,它可以“看起来”缩小。
我会满足于一些绘图技巧,但似乎动画变换会给出最好的外观。
【问题讨论】:
标签: ios objective-c uiview uibarbuttonitem