0

ここでたくさん検索しましたが、私の質問に対する答えが見つからないようです...

私はSubViewと呼ばれるクラスを持っています、このクラスは単純な能力を持っています、それはアニメーションで現れたり消えたりすることができます

それはこのようにそれをします:

-(void)showAnimated:(BOOL)animated {

self.active = YES;

//Make topmost
[self.parentView bringSubviewToFront:self];

if (animated) {

    [UIView animateWithDuration:0.5
                          delay:0.0f
                        options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                         self.frame = self.originalFrame;
                         if (self.panningBlock) {
                             self.panningBlock(self.contentView.frame);
                         }
                     }
                     completion:^(BOOL finished){
                     }];

}

else {
    self.frame = self.originalFrame;
    if (self.panningBlock) {
        self.panningBlock(self.contentView.frame);
    }
}

self.originalFrameがビューの位置の元の値を保存している場合、実際に類似している場合は非表示部分

-(void)hideAnimated:(BOOL)animated {

self.active = NO;

//Store the frame
CGRect _frame = self.frame;

//Set the view starting point
switch (self.showingLocation) {
    case SubViewShowingLocationRight:
        _frame.origin = CGPointMake(_frame.size.width, _frame.origin.y);
        break;
    case SubViewShowingLocationBottom:
        _frame.origin = CGPointMake(_frame.origin.x, _frame.size.height);
        break;
    case SubViewShowingLocationLeft:
        _frame.origin = CGPointMake(-_frame.size.width, _frame.origin.y);
        break;

    default:
        break;
}


if (animated) {
    [UIView animateWithDuration:0.5
                          delay:0.0f
                        options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                         self.frame = _frame;
                         if (self.panningBlock) {
                             self.panningBlock(self.contentView.frame);
                         }
                     }
                     completion:^(BOOL finished){
                     }];

}
else {
    self.frame = _frame;
    if (self.panningBlock) {
        self.panningBlock(self.frame);
    }
}

[self.delegate didDismissSubView:self];

}

////したがって、アニメーションはself.frame=_frameおよびself.frame=self.originalFrameで発生します

また、self.panningBlockがあります。これは、親ビューが提供できるブロックです(サブビューのフレーム変更に合わせて調整できるように機能します。つまり、サブビューにはピッカーがあり、下から表示されます。ピッカーによって隠されないようにテーブルビューを調整します)

私がしていることの例は

__weak MapViewController * weakSelf = self;
[weakSelf.placesView setPanningBlock:^(CGRect _frame){

    if (weakSelf.placesView.isActive) {
        CGRect mapFrame = weakSelf.mapView.frame;
        mapFrame.origin.x = _frame.origin.x + _frame.size.width;
        weakSelf.mapView.frame = mapFrame;
    }
    else {
        CGRect mapFrame = weakSelf.mapView.frame;
        mapFrame.origin.x = 0;
        weakSelf.mapView.frame = mapFrame;
    }
}];

ここで、サブビューがアニメーションのようなプッシュを与えるように見える場合、親ビューは右に移動します

理解するために必要なコードはこれですべてです(これが私の最初の質問なので、ここでのとりとめのないことは許してください)

重要なのは、アニメーションが同時に発生しないということです。何が起こるかというと、入ってくるビューは、それらがくっついていない親ビューよりも少し遅く入るということです。そして、私は本当に何をすべきかわかりません。 ..。。

ところで:アニメーションが最初に発生したとき、それらはくっつきますが、それ以降はくっつきません。

助言がありますか?

編集 私は今何が起こるかを説明するためにいくつかの画像を与えます

スクリーンショット1 スクリーンショット2

4

1 に答える 1

1

実際には答えが出なかったのでこれを入れました...

ここでの問題は、ビューの合計サイズにありました。

MAPVIEWのサイズは100%で、テーブルビューのサイズは80%です...同じアニメーションに配置していました...動き全体で1.0秒程度のアニメーションをカバーする必要があるため、動きが異なります...

この問題は、明示的なアニメーションを実行することで修正されます...そこにいくつかのライブラリがあります...プロジェクトを破壊したライブラリを使用しました...それで私はそれを捨てることになりました...そしてもっと...パッチソリューションを取りました。 ..動きをマスクするように背景色を配置します。

この問題の解決策は、明示的なアニメーションを使用し、フレームごとに...両方のビューを同じポイントに移動することです...

この「解決策」がコミュニティに役立つことを願っています。

于 2013-03-21T01:00:16.133 に答える