Я реализую простую пасьянс iOS, позволяющую пользователю перетаскивать карты обычным способом. Карты представлены подклассом UIView
CardView
. Все виды карт - это братья и сестры, которые являются подземелиями SolitaireView
. Следующий фрагмент кода пытается «принести карту на фронт», так что она выше всех других точек зрения, как его перетаскивании:UIView bringSubviewToFront: делает * не * приносит вид спереди
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if (touch.view.tag == CARD_TAG) {
CardView *cardView = (CardView*) touch.view;
...
[self bringSubviewToFront:cardView];
...
}
}
К сожалению, г-приказание карты остается неизменным во время торможения. На изображениях ниже я перетаскиваю Короля. Обратите внимание на то, как это правильно на вершине Девять в леве изображения, но неверно по второй (по всей стеке на самом деле) в правом изображении:
Я также попытался изменить layer.zPosition
свойства, как ну безрезультатно. Как я могу отобразить карту на передней панели во время перетаскивания? Я озадачен.
Я обнаружил, что 'bringSubviewToFront:' запускает флаг вида по «needsLayout» должен быть установлен. Мой метод 'layoutSubviews' также вызывал' bringSubviewToFront: 'таким образом, возвращая все z-порядки представления обратно в исходное состояние! – wcochran
Тогда какое решение для этого? У меня также есть такие же требования, когда из списка карточек, если я выбираю какую-либо карточку среднего ордера, он должен подняться, а затем выйти на фронт. но моя анимация не работает из-за bringSubviewToFront: method – Mrunal
Если вы придерживаетесь подклассов UIView, тогда вам нужно отметить перетаскиваемую карту, чтобы layoutSubviews мог разместить ее сверху. Я фактически переключился на использование CALayers, как указано ниже. – wcochran