0
我在屏幕上4個對象:(UIView的或UIButton的)更改佈局時,對象是不可見的
A B C D
在某些情況下,我需要隱藏一個或更多的人,這將導致此:
A C D
或本:
A D
有iOS 5中(的方式不能用AutoLayout
)(使用大量的IFS和編程方式設置的位置)來修整空間,並迫使上述示例看起來像這樣旁:
A C D
A D
我在屏幕上4個對象:(UIView的或UIButton的)更改佈局時,對象是不可見的
A B C D
在某些情況下,我需要隱藏一個或更多的人,這將導致此:
A C D
或本:
A D
有iOS 5中(的方式不能用AutoLayout
)(使用大量的IFS和編程方式設置的位置)來修整空間,並迫使上述示例看起來像這樣旁:
A C D
A D
我用KVO實現這一點。
第1步:註冊ViewController
作爲觀察員在所有視圖中隱藏屬性的更改。
[_view1 addObserver:self forKeyPath:@"hidden" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
[_view2 addObserver:self forKeyPath:@"hidden" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
[_view3 addObserver:self forKeyPath:@"hidden" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
[_view4 addObserver:self forKeyPath:@"hidden" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
第2步: Add方法來應對變化中ViewController
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
if(![object isEqual:[viewArray lastObject]]){
UIView *viewToHide = (UIView *)object;
CGRect newFrame = viewToHide.frame;
CGRect oldFrame;
int indexOfObject = [viewArray indexOfObject:object];
for(int i = indexOfObject + 1; i < viewArray.count; i++){
UIView *viewToChange = [viewArray objectAtIndex:i];
if(viewToChange.hidden){
continue;
}
else{
oldFrame = viewToChange.frame;
viewToChange.frame = newFrame;
[viewArray replaceObjectAtIndex:i withObject:viewToChange];
newFrame = oldFrame;
}
}
}
}
第3步通知:我輕敲他們躲在意見。當然,你可以以任何你想要的方式實現這一點。
- (IBAction)viewTapped :(UIGestureRecognizer *)recogniser{
CGPoint touchPoint = [recogniser locationInView:self.view];
UIView *touchView = [self.view hitTest:touchPoint withEvent:nil];
if([touchView isKindOfClass:[UIView class]]){
touchView.hidden = YES;
}
}
我想沒有簡單的方法。您需要編寫代碼來更改框架或變換。 –
幸運的是我只有1-4個對象可以顯示。如果我需要顯示和隱藏10個物體,該怎麼辦?這是很多ifs。 – Segev
使用關鍵值觀察(KVO)。當一個視圖被隱藏時,您會看到該消息,因此您可以轉移其他視圖。在這種情況下,你不需要很多ifs。 –