2

スワイプジェスチャを使用してカレンダーの月間を移動するiPadアプリを開発しています。アニメーションスタイルは良好で、アプリはアニメーションの前後に正しい画面を表示します。ただし、アニメーション中には2つの問題があります。

-元のビューが歪んだりぼやけたりします。
-アニメーション中の翌月(10月)ではなく、元の月(9月)が「次のページに」表示されます。

このスクリーンショットを撮る仕事がありましたが、アニメーションのショットの左上隅を見ると、問題がわかります。すべてのテキストが太字になっているようです。これが画像とそれに続くコードです。

アニメーションの前:

アニメーションの前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です。おそらくこれが重要なのか、私にはわかりません。

解決策を事前に感謝します。

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 に答える