Примечание - возможно, UIViewControllerAnimatedTransitioning
имеет значение здесь.
Примечание. Я только что понял, что новый жест iOS7 "проведите по экрану" - это концепция
есть некоторые ответы ЗДЕСЬ:
UICollectionView "swipe-away" в диспетчере приложений iOS7?
Представьте, что ваш iPad имеет UICollectionView ( "большой экран" ), вертикальный, который содержит 10 ячеек, каждый из которых говорит примерно 400x400. Представьте, что bigView находится в правой половине экрана, скажем.
Я хочу сделать это:
Возможно, появится номер ячейки 3.
Эта ячейка удаляется из коллекции (например, слева от экрана). TBC он перемещается за пределы UICollectionView. В идеале это становится нормальным UIView (скажем).
На самом деле я хочу:
(1) уничтожить остальные 9 ячеек
(2) полностью уничтожить UICollectionView
(3) на самом деле, преобразуйте одну ячейку, # 3, в (я думаю) UIView
Я возьму его оттуда!
Можно ли это сделать?
(a) можете ли вы "преобразовать" UICollectionViewCell в UIView (у вас есть UIView guts, которые вы можете "удалить"?)
(b) можете ли вы (возможно) уничтожить все остальные ячейки, оставив UICollectionView, действительно, действительно являющимся только одной ячейкой (и, возможно, переместите "все" )...
(c) существует ли какой-либо другой механизм "отрыва" из UICollectionView?
Работая над этим много, много раз сейчас, здесь в основном простейшее базовое решение.
У вас будет класс, который является буквальным представлением коллекции,
@interface BouncyItems : UICollectionViewController
в этом классе у вас будет файл didSelectItemAtIndexPath: или аналогичный:
вы можете легко попасть в соответствующую ячейку.
-(void)collectionView:(UICollectionView *)cv
didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger thisRow = indexPath.row;
NSString *thatName = yourData.stuff[thisRow][@"nameField"];
YourCellClass *cell = [cv cellForItemAtIndexPath:indexPath];
NSLog(@"Yo, peeling off ....... %@ %@", theName);
YourScene *parent = (YourScene *)self.parentViewController;
[parent peelOff:cell.holder];
}
Но что более важно, у вас будет реальная сцена, которая имеет вид контейнера, представляющий собой представление коллекции.
Итак, в примере "YourScene" - это UIViewController, который действительно имеет несколько видов контейнеров. Один из этих представлений контейнеров - действительно рассматриваемый вид коллекции.
@interface YourScene:UIViewController
@property (nonatomic, strong) IBOutlet UIView *bouncyItemsContainer;
-(void)peelOff:(UIView *)peelMe;
@end
Обратите внимание, что в раскадровке, глядя на ваши BouncyItems, вы перетащили бы соединение из него в "bouncyItemsContainer"
(Не отличается от того, как вы подключаете кнопки в "YourScene" к соответствующим элементам IBOutlet.)
Итак, глядя на код в файле didSelectItemAtIndexPath, это легко,
YourScene *parent = (YourScene *)self.parentViewController;
[parent peelOff:cell.holder];
Что такое ".holder".. объясняется ниже.
Теперь, что такое рутина peelOff? Удивительно, но это просто.
Секретный соус - это код конвертации: <...
-(void)peelOff:(UIView *)peelMe
{
CGPoint oldCenter = [self.view
convertPoint:peel.center
fromView:peel.superview];
[self.view addSubview:peelMe];
peelMe.center = oldCenter;
[self.bouncyItemsContainer exitLeft];
}
{Вспомним, что addSubview:
удобно удаляет представление из него старого супервизора, поэтому он делает все это для вас в одной строке кода.}
Итак, что это - первые три строки кода, вы удалили одну ячейку peelMe из представления контейнера. Теперь это просто часть обычной сцены, YourScene.
Затем просто "избавьтесь" от вида коллекции. В моем примере exitLeft просто анимирует его с экрана влево.
Итак, это идеально - вы нажимаете на одну ячейку; все остальное изображение коллекции оживляется с экрана (вы можете делать все, что хотите, сделать так, чтобы они "улетали", выходили наружу, падали - что угодно), и одна выбранная ячейка остается позади. Из-за "волшебной" строки кода конвертации все остается на месте.
Наконец, все ячейки должны иметь ".holder", который является.....
UIView, который содержит все в ячейке; это то, что вы снимаете. (Это единственное практическое решение, не вынимайте базовый .contentView ячейки.) Вы можете тщательно упорядочить белый/прозрачный фон и так, чтобы все "работало" правильно, если вы летаете вокруг на сцене.
Итак, все, что с ним связано.
Теперь у вас (1) избавился от вида коллекции, и (2) ваша YourScene владеет тем, что было ячейкой.
Итак, в peelOff: вы пройдете через .holder UIVIew, и, вероятно, вы также пройдете через некоторые ваши данные, как в "пользователь выбрал этот дом, чтобы увидеть интерьер" или что бы ни был ваш контекст.
Наконец, в исходном вопросе он упоминает, что затем перемещает очищенный вид, в некоторую позицию на YourScene. Конечно, просто оживите его, хотите ли вы, возможно, в peelOff:.
Надеюсь, что это поможет.