Может ли кто-нибудь помочь мне в этом сценарии?Вид слайдера для iOS
* Существует кнопка, при нажатии которой слайды открывают UIView, а нажатая кнопка остается слева.
* Эта кнопка при повторном нажатии делает снимок UIView назад.
Может ли кто-нибудь помочь мне в этом сценарии?Вид слайдера для iOS
* Существует кнопка, при нажатии которой слайды открывают UIView, а нажатая кнопка остается слева.
* Эта кнопка при повторном нажатии делает снимок UIView назад.
То, что вы описали, легко. Давайте назовем представление, которое сместится справа от ящика («drawerView»). Настройте вид ящика как дочерний вид основного вида вашего контроллера.
Сделайте этот «выдвижной ящик» видом на контейнер. Поместите все, что вы хотите в него. (Ваш текстовый вид, кнопки и т. Д.) Также поместите свою кнопку в это представление. Подключите эту кнопку к действию «slideDrawer» в вашем контроллере просмотра.
Затем убедитесь, что «подпункты клипов» являются ложными, и переместите кнопку с левого края ящика с помощью клавиши со стрелкой влево. В IB он исчезнет, но не беспокойтесь. IB не соблюдает флаг «clipviews», как ваша работающая программа.
Создайте розетку для вашего drawerView и привяжите ее к вашему коду.
Как только у вас есть вид вашего выдвижного ящика, который выглядит именно так, как вы этого хотите, обратите внимание, что это координата x в «инспекторе размеров». Назовем это значение kVisibleX. Затем перетащите этот вид вправо, пока он не закроется. Кнопка не будет видна в IB, но будет видна только на краю окна во время выполнения. (как показано на первом изображении)
Обратите внимание на координату x в представлении ящика, когда он выключен. Назовем это значение kOffscreenX.
Добавить логическую переменную экземпляра «drawerIsShowing» в контроллер вашего вида.
Теперь написать метод IBAction slideDrawer:
- (IBAction) slideDrawer: (id) sender;
В этом методе проверки drawerIsShowing, чтобы увидеть, если ящик в настоящее время виден. Если это так, сдвиньте его за пределы экрана. Если это не так, сдвиньте его на экран.
- (IBAction) slideDrawer: (id) sender;
{
CGFloat newX;
if (drawerIsShowing)
newX = kOffscreenX;
else
newX = kVisibleX;
[UIView animateWithDuration: .25
animations:
^{
CGRect drawerFrame = drawerView.frame;
drawerFrame.origin.x = newX;
drawerView.frame = drawerFrame;
}
drawerIsShowing = !drawerIsShowing;
}
У меня было бы окно 1 be view1 и окно 2 be view2. Заполните каждое из этих представлений тем, что должно быть в представлении. Если вы хотите, чтобы одна и та же кнопка находилась в обоих режимах, поместите кнопку в каждое представление с тем же текстом. Для пользователя это одна и та же кнопка. Сделайте действие кнопки на вид 1 нажмите для просмотра 2. View 2 будет инициализироваться с помощью того, что вы сказали ему. Нажатие кнопки на вид 2 вытолкнет вид и вернет его для просмотра 1 ...
Надеюсь, что это поможет. Если вам нужна более конкретная помощь, предоставьте дополнительную информацию, и я буду в состоянии помочь вам в дальнейшем.
sunrize920, я хочу, чтобы представление открывалось и закрывалось в том же окне (RootView). так что не помогло бы – Breakpoint
Если вы удалили переходную анимацию, это было бы похоже на то, что это один и тот же вид, используя код что-то в строках [self presentModalViewController: vc animated: NO]; поэтому в основном сделать два представления одинаковыми, кроме добавления всего остального в view2. Без анимации при переходе это создавало бы видимость. Вот как бы я это сделал ... но если вы настаиваете на том, что uiview появляется в том же окне, это отличная история – sunrize920
, спасибо за это восход солнца, но я считаю, что его можно сделать в том же виде – Breakpoint
Объявить BOOL, чтобы проверить, что вид скрыт или нет.
В .h
BOOL _isContentVisible;
В.m
-(IBAction)showHideContentView:(id)sender
{
//BOOL isContentVisible= CGRectIntersectsRect(self.view.bounds, _sideContentScrollView.frame);
[UIView animateWithDuration:1.0f
delay:0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
//hide if visible else show
if (_isContentVisible) { // Hide
_isContentVisible = NO;
[_sideContentView setFrame:CGRectMake(-320, 0, 360, 748)];// 40 is assumed to button size
}
else { // Show
_isContentVisible = YES;
[_sideContentView setFrame:CGRectMake(0, 0, 360, 748)];
}
}
completion:^(BOOL finished) {
if (finished) {
}
}];
}
wow ! красивый ответ. Большое спасибо Дункан! :) – Breakpoint