ここでたくさん検索しましたが、私の質問に対する答えが見つからないようです...
私は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;
}
}];
ここで、サブビューがアニメーションのようなプッシュを与えるように見える場合、親ビューは右に移動します
理解するために必要なコードはこれですべてです(これが私の最初の質問なので、ここでのとりとめのないことは許してください)
重要なのは、アニメーションが同時に発生しないということです。何が起こるかというと、入ってくるビューは、それらがくっついていない親ビューよりも少し遅く入るということです。そして、私は本当に何をすべきかわかりません。 ..。。
ところで:アニメーションが最初に発生したとき、それらはくっつきますが、それ以降はくっつきません。
助言がありますか?
編集 私は今何が起こるかを説明するためにいくつかの画像を与えます