Bir slayt görünümünde bir koleksiyon görünümüne ve iki kapsayıcı görünümüne sahibim (menülere çağrı yapalım). Menugrid kaydırıldığında, çerçeve tüm ekranı kaplayacak şekilde ayarlanır. Bir kullanıcının bir UICollectionView hücresini kapsayıcı görünümüne sürükleyip bırakabileceği bir işlev oluşturmaya çalışıyorum. Sürükle bırakmaya başladığımda, menugrid görünümü ekranın alt kısmında bulunan başlangıç konumuna geri döner.Swift: Bir alt görünüm eklendiğinde görüntünün çerçevesi değişiyor
func handlePanForCell(gestureRecognizer: UILongPressGestureRecognizer) {
let pressPoint: CGPoint = gestureRecognizer.locationInView(gestureRecognizer.view)
let localPoint : CGPoint = self.menuGridView.convertPoint(pressPoint, fromView: gestureRecognizer.view!)
var cell : MenugridCollectionViewCell = MenugridCollectionViewCell()
if(gestureRecognizer.view is UICollectionViewCell){
if (gestureRecognizer.state == UIGestureRecognizerState.Began) {
cell = gestureRecognizer.view as! MenugridCollectionViewCell
UIGraphicsBeginImageContext(cell.bounds.size);
cell.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let cellImage : UIImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.movingCell = UIImageView.init(image: cellImage)
self.movingCell?.alpha = 0.75
//let cellFrameInSuperview : CGRect = self.menuGridCollectionView.convertRect(cell.frame, toView: self.menuGridView)
self.movingCell?.center = localPoint
//self.movingCell?.frame = cellFrameInSuperview
self.view.addSubview(self.movingCell!)
}
if (gestureRecognizer.state == UIGestureRecognizerState.Changed) {
self.movingCell?.center = localPoint
setMenuGridViewOnTop()
}
if (gestureRecognizer.state == UIGestureRecognizerState.Ended) {
// Check to see if the drop area is in the personalized info-area
let isContaining = self.menuGridView.convertRect(self.firstContainerView.frame, toView: self.menuGridView).contains(self.movingCell!.frame) || self.middleView.convertRect(self.secondInfoView.frame, toView: self.menuGridView).contains(self.movingCell!.frame)
if isContaining
{
if(self.middleView.convertRect(self.firstInfoView.frame, toView: self.view).contains(self.movingCell!.frame)) {
//let index = self.findIndexOfViewController(self.infoViewArray[0])
//let oldViewController : UIViewController = self.childViewControllers[Int(index)] as UIViewController
self.switchInfoViews(nil, toView: (gestureRecognizer.view as! MenugridCollectionViewCell).name!, atPosition: 0, parentView: "menuGridView")
}
else {
self.switchInfoViews(nil, toView: (gestureRecognizer.view as! MenugridCollectionViewCell).name!, atPosition: 1, parentView: "menuGridView")
}
//self.movingCell?.removeFromSuperview()
}
self.movingCell?.removeFromSuperview()
self.movingCell = nil
//setMenuGridViewOnTop()
//self.view.viewWithTag(1000)?.removeFromSuperview()
//self.view.viewWithTag(1001)?.removeFromSuperview()
//self.middleView.alpha = 1
//self.childViewControllers[0].view.alpha = 1
//self.childViewControllers[1].view.alpha = 1
//self.topView.alpha = 1
}
}
//setMenuGridViewOnTop()
}
//MARK: - Switch Views
func switchInfoViews(fromViewController : UIViewController?, toView : String, atPosition : CGFloat, parentView : String) {
var newViewController : InfoViewController = InfoViewController()
var storyBoardIdOfNewView = String()
if(toView == "Doctor"){
newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ProviderSearchInfoViewControllerID") as! ProviderSearchInfoViewController
storyBoardIdOfNewView = "ProviderSearchInfoViewControllerID"
}
else if(toView == "PayBill"){
newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("PayBillInfoViewControllerID") as! PayBillInfoViewController
storyBoardIdOfNewView = "PayBillInfoViewControllerID"
}
else if(toView == "Symptoms"){
newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SymptomsInfoViewControllerID") as! SymptomsInfoViewController
storyBoardIdOfNewView = "SymptomsInfoViewControllerID"
}
else if(toView == "Handouts"){
newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("PatientHandoutInfoViewControllerID") as! PatientHandoutInfoViewController
storyBoardIdOfNewView = "PatientHandoutInfoViewControllerID"
}
else if(toView == "FirstAid"){
newViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("FirstAidInfoViewControllerID") as! FirstAidInfoViewController
storyBoardIdOfNewView = "FirstAidInfoViewControllerID"
}
if(parentView == "menuGridView") {
let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier(storyBoardIdOfNewView)
if(atPosition == 0){
self.firstContainerView.subviews.forEach({ $0.removeFromSuperview() })
viewController.view.frame = CGRectMake(0, 0, (self.menuGridView.frame.width/2) - 3, self.menuGridView.frame.height * 0.3)//self.firstContainerView.frame
self.firstContainerView.addSubview(viewController.view)
}
else {
self.secondContainerView.subviews.forEach({ $0.removeFromSuperview() })
viewController.view.frame = CGRectMake(0, 0, (self.menuGridView.frame.width/2) - 3, self.menuGridView.frame.height * 0.3)//self.secondContainerView.frame
self.secondContainerView.addSubview(viewController.view)
}
if(self.menuAtTop){
self.setMenuGridViewOnTop()
}
}
else if(parentView == "middleView"){
if(!self.checkIfViewControllerIsAlreadyDisplayed(newViewController))
{
fromViewController?.willMoveToParentViewController(nil)
fromViewController?.view.removeFromSuperview()
fromViewController?.removeFromParentViewController()
self.movingCell?.removeFromSuperview()
newViewController.view.frame = CGRectMake(0 + atPosition * self.middleView.frame.size.width/2, 0 , self.middleView.frame.size.width/2, self.middleView.frame.size.height)
self.middleView.addSubview(newViewController.view)
self.addChildViewController(newViewController)
newViewController.didMoveToParentViewController(self)
if(self.infoViewArray.count > 0) {
self.infoViewArray.removeAtIndex(Int(atPosition))
self.infoViewArray.insert(toView, atIndex: Int(atPosition))
}
}
}
}
buna sebep ne olabilir: Burada
bazı kodudur? Bunun neden olacağına şaşırdım ve bununla ilgili her türlü yardımı takdir ediyorum. Teşekkür ederim.
Görünümlerde otomatik düzen kümesi yok. Düzen, kod olarak ayarlanıyor. – userx