Я пытаюсь создать настраиваемое раскрывающееся меню. У меня будет несколько карт на моем представлении, которые должны иметь раскрывающееся меню при нажатии.Скользящий UIView «Из ниоткуда»
Прямо сейчас я имею в dropDownView
имея cardView.frame.maxY
как его frame.origin.y
значения с высотой 0, и когда я нажимаю на вид карты я установить высоту dropDownView
его реальную высоту стоимость в анимации.
Но это выглядит как уродливое, так как похоже, что оно выходит из ниоткуда. Я хочу, чтобы он скользнул из ниоткуда.
Под этим я имею в виду, что имеет свой оригинальный размер сразу и сидя под видом карты (cardView.frame.maxY = dropDownView.frame.maxY
) Когда cardView сливают в dropDownView
скользит вниз (dropDownView.frame.origin.y = cardView.frame.maxY
) в анимации.
Проблема в том, что dropDownView
больше, чем cardView
. Поэтому, когда он сидит за cardView
, он отображается над cardView
. Я попытался проиллюстрировать проблему :)
Это состояние A (До View A [cardView] сливают) (View C лишь некоторые предпосылки View, которая должна быть видна сверху и снизу View A)
Это состояние B (после cardView касании)
Любые идеи, как решить эту проблему? Спасибо!
В дополнение Heres немного образец кода:
class cardViewComplete: UIView {
var card: CardView!
var dropDownMenu: DropDownView!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
func initSubViews() {
self.clipsToBounds = true
card = CardView()
card.frame = self.bounds
card.addTarget(self, action: #selector(YellowTackleTicketComplete.ticketTapped), forControlEvents: .TouchDown)
dropDownMenu = DropDownView()
dropDownMenu.frame = CGRect(x: 0, y: self.bounds.maxY, width: self.bounds.width, height: 350)
dropDownMenu.hidden = true
dropDownMenu.backgroundColor = UIColor.clearColor()
self.addSubview(card)
self.insertSubview(dropDownMenu, belowSubview: card)
dropDownMenu)
}
func showDropdown() {
dropDownMenu.hidden = false
originalHeight = self.frame.size.height
print("showing")
if !animating {
animating = true
UIView.animateWithDuration(
0.7,
delay: 0,
usingSpringWithDamping: 0.7,
initialSpringVelocity: 0.5,
options: [],
animations: {
self.frame.size.height = self.frame.size.height + 350
}, completion: { _ in
self.animating = false
}
)
}
self.setNeedsDisplay()
self.dropDownMenu!.setNeedsDisplay()
dropped = true
}
func ticketTapped() {
showDropdown()
}
}
Вы могли бы просто поместить viewB за viewC? так что он будет покрыт им до того, как будет затронут ViewA. –
Привет, Альберто, им жаль, я думаю, что мой второй рисунок немного раздражает. Вид C не должен заканчиваться в нижней части окна A. Предполагается, что это будет общий фон. Прямо сейчас я экспериментирую с clipToBounds = true. Но до сих пор мне не удавалось сгладить слайд вниз/вверх анимации. – weka1
Я не понимаю вашу проблему, я думаю:/... поэтому, когда вы касаетесь вида A, вы хотите, чтобы viewB переместился? (если вы установите представление с помощью clipToBounds = true, то внутри него будут невидимы внешние объекты) –