2

我正在开发一个 iPad 应用程序,它使用滑动手势在日历上的月份之间移动。动画风格很好,应用程序在我的动画前后显示正确的屏幕。但是,在动画过程中,有两个问题:

- 原始视图被扭曲或模糊。
- 在动画期间,原始月份(9 月)显示在“下一页”而不是下个月(10 月)。

我有一份工作要截取这个截图,但如果你看一下动画镜头的左上角,你会发现问题。看起来所有的文字都变成了粗体。这是图像,然后是代码。

动画前:

动画前 http://i1219.photobucket.com/albums/dd427/Dave_Chambers/1-2.png

动画期间:

动画期间

如果您查看左上角的“K-SUPER...”,您会发现由于动画造成的失真,文字较粗。

动画结束后:

动画结束后

任何人都知道我该如何解决这个问题,所以我看到之前的九月,动画期间的十月和之后的十月?

编码:

    - (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。也许这很重要,我不知道。

提前感谢任何解决方案。

4

2 回答 2

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.
                }];
于 2012-09-04T15:47:17.623 回答
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];
}];
于 2012-09-04T15:41:58.500 回答