我正在开发一款iPad应用,它使用滑动手势在日历上的月份之间移动。动画样式很好,应用程序在我的动画之前和之后显示正确的屏幕。但是,在动画期间,存在两个问题:
- 原始视图变形或模糊 - 动画期间,原始月份(9月)显示在“下一页”而不是下个月(10月)。
我有一份工作要抓住这个截图,但是如果你看一下动画镜头的左上角你可以看到问题。看起来所有的文字都变得大胆了。这是图像,后面是代码。
在动画之前:
Before the animation http://i1219.photobucket.com/albums/dd427/Dave_Chambers/1-2.png
动画期间:
如果你看左上角的'K-SUPER ...',你可以看到由于动画引起的失真,文字更粗。
动画结束后:
任何人都知道我怎么能解决这个问题,所以我看到9月之前,10月在动画期间和10月之后?
代码:
- (void)swipedInLeftDirection:(UISwipeGestureRecognizer *)sender {
NSLog(@"UserActions: %s", __PRETTY_FUNCTION__);
[MonthlyEventView animateWithDuration:1.0
animations:^{
[MonthlyEventView setAnimationTransition: UIViewAnimationTransitionCurlUp forView:self cache:NO];
}
completion:^(BOOL finished) {
NSDateComponents* plusOneMonth = [[NSDateComponents alloc] init];
[plusOneMonth setMonth:1];
NSDate* oneMonthForward = [[NSCalendar currentCalendar] dateByAddingComponents:plusOneMonth toDate:self.selectedDate options:0];
[self.delegate monthlyView:self userDidPerformSwipeInDirection:UISwipeGestureRecognizerDirectionLeft andExpectingDateToBeSelected:oneMonthForward];
}];
}
对于它的价值,视图大小是704 x 569.也许这很重要,我不知道。
提前感谢任何解决方案。
答案 0 :(得分:1)
你的文字失真是由于在几乎完全相同的位置绘制标签,几乎是由于动画,创造了一种大胆的效果。最简单的解决方案是简单地让您的日历视图不透明。即为整个视图设置[UIColor lightGrayColor]
的背景颜色。这也会使卷曲页面的背面显得灰白色,就像人们期望的灰纸一样。
还有关于旧月出现在动画下面的原因。 UIView
转换的机制基本上是捕获视图的当前外观,然后渲染动画后它应该是什么样子,然后在屏幕外设置原始捕获的动画。在所有这些发生之后,完成块被称为。所以基本上你从你所处的状态动画到你所处的状态,然后将日历设置为新的日期。因此可能听起来很奇怪,设置日历的日期是动画的一部分。
此外,还有一个更直接的基于块的API。
[UIView transitionWithView:self // since this code is in the view's implementation.
duration:0.8
options:UIViewAnimationOptionTransitionCurlUp
animations:^{
NSDateComponents* plusOneMonth = [[NSDateComponents alloc] init];
[plusOneMonth setMonth:1];
NSDate* oneMonthForward = [[NSCalendar currentCalendar] dateByAddingComponents:plusOneMonth toDate:self.selectedDate options:0];
[self.delegate monthlyView:self userDidPerformSwipeInDirection:UISwipeGestureRecognizerDirectionLeft andExpectingDateToBeSelected:oneMonthForward];
}
completion:^(BOOL b){
// If you need notification when the animation completes put a callback here.
}];
答案 1 :(得分:0)
用此替换动画代码,然后重试:
[UIView animateWithDuration:1.0 delay:0 options:UIViewAnimationTransitionCurlUp animations:^{
monthlyEventView.center = CGPointMake(<#CGFloat x#>, <#CGFloat y#>);//set center, frame or bounds
} completion:^(BOOL finished) {
NSDateComponents* plusOneMonth = [[NSDateComponents alloc] init];
[plusOneMonth setMonth:1];
NSDate* oneMonthForward = [[NSCalendar currentCalendar] dateByAddingComponents:plusOneMonth toDate:self.selectedDate options:0];
[self.delegate monthlyView:self userDidPerformSwipeInDirection:UISwipeGestureRecognizerDirectionLeft andExpectingDateToBeSelected:oneMonthForward];
}];