Ios 视线迟迟不见了

Ios 视线迟迟不见了,ios,swift,xcode,navigationcontroller,icarousel,Ios,Swift,Xcode,Navigationcontroller,Icarousel,我有带2个UIViewController的navigationController 当我按下“后退按钮”从secondview查看时,控制器将消失,延迟1秒 p.S.我使用iCarouselpod初始化secondViewController中的视图 请参见屏幕截图: 当我从另一个按钮按下“后退”按钮时: 1秒后第一个控制器(第二个控制器的视图消失) 更新: 第二视图控制器 class AppsController : UIViewController, iCarouselDataSour

我有带2个UIViewController的
navigationController

当我按下
“后退按钮”
secondview查看时,控制器将消失
,延迟1秒

p.S.我使用
iCarousel
pod初始化
secondViewController
中的视图

请参见屏幕截图:

当我从另一个按钮按下“后退”按钮时:

1秒后第一个控制器(第二个控制器的视图消失)

更新: 第二视图控制器

class AppsController : UIViewController, iCarouselDataSource, iCarouselDelegate {
let xmlHelper = XmlHelper()
var apps = Apps(data:[App]())
var selectUrl = ""
var selectTitle = ""
var scrollIndex = 0

@IBOutlet var carousel: iCarousel!

override func viewDidLoad() {
    super.viewDidLoad()
    self.carousel.delegate = self
    self.carousel.isPagingEnabled = true
    DispatchQueue.main.async {
        self.initApps()
    }
}

func numberOfItems(in carousel: iCarousel) -> Int {
    return apps.data.count
}

func carousel(_ carousel: iCarousel, viewForItemAt index: Int, reusing view: UIView?) -> UIView {
    let appView: AppView = Bundle.main.loadNibNamed("appView",
                                                    owner: nil,
                                                    options: nil)?.first as! AppView!
    appView.titleLabel?.text = apps.data[index].title
    appView.descLabel?.text = apps.data[index].desc
    appView.frame = CGRect(x:0, y:0, width:self.view.frame.width-30, height:carousel.frame.height-60)
    appView.backgroundColor = UIColor.white

    var shadowLayer: CAShapeLayer!
    shadowLayer = CAShapeLayer()
    shadowLayer.path = UIBezierPath(roundedRect: appView.bounds, cornerRadius: 0).cgPath
    shadowLayer.fillColor = UIColor.white.cgColor

    shadowLayer.shadowColor = UIColor.lightGray.cgColor
    shadowLayer.shadowPath = shadowLayer.path
    shadowLayer.shadowOffset = CGSize(width: 0.0, height: 0.0)
    shadowLayer.shadowOpacity = 0.8
    shadowLayer.shadowRadius = 2

    appView.layer.insertSublayer(shadowLayer, at: 0)

    appView.storeButton.addTarget(self, action: #selector(didTapApp), for: UIControlEvents.touchUpInside)

    DispatchQueue.main.async {
        appView.iconView?.sd_setImage(with: URL(string:self.apps.data[index].icon
            ), completed: { (image, error, cache, url) in
                if error == nil {
                    appView.iconView.image = appView.iconView.image?.cropToBounds(image: image!, width: 30, height: 30)
                }
        })
    }
    return appView
}


func carousel(_ carousel: iCarousel, valueFor option: iCarouselOption, withDefault value: CGFloat) -> CGFloat {
    if (option == .spacing) {
        return value * 1.1
    }
    return value
}


func didTapApp() {
    if self.apps.data.count != 0 {
        UIApplication.shared.open(URL(string: "itms://itunes.apple.com/app/id" + self.apps.data[carousel.currentItemIndex].link)!, options: [:], completionHandler: nil)
    }
}

func initApps() {
    xmlHelper.getAnoutherApps { (apps) in
        if apps != nil{
            self.apps = apps!
            self.carousel.reloadData()
        }
    }
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = constants.back
    navigationItem.backBarButtonItem = backItem
    if segue.identifier == "toWeb" {
        let vc = segue.destination as! WebController
        vc.fileUrl = nil
        vc.url = self.selectUrl
        vc.title = self.selectTitle
        self.tabBarController?.tabBar.isHidden = true
    }
}
class SettingsController : UITableViewController, MFMailComposeViewControllerDelegate {


var selectUrl : URL?
var selectTitle = ""
var selectStringUrl = ""

override func viewDidLoad() {
    super.viewDidLoad()
    self.initUI()
}

override func numberOfSections(in tableView: UITableView) -> Int {
    return 4
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    switch section {
    case 0:
        return 2
    case 1:
        return 1
    case 2:
        return 1
    case 3:
        return 3
    default:
        return 0
    }
}

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    switch section {
    case 0:
        return constants.info
    case 1:
        return constants.settings
    case 2:
        return constants.connect
    case 3:
        return constants.community
    default:
        return ""
    }
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "settingsTitleCell")!
    let itemSize = CGSize(width:30, height:30);
    UIGraphicsBeginImageContextWithOptions(itemSize, false, UIScreen.main.scale);
    let imageRect = CGRect(x:0.0, y:0.0, width:itemSize.width, height:itemSize.height);
    cell.imageView?.image!.draw(in: imageRect)
    cell.imageView?.image! = UIGraphicsGetImageFromCurrentImageContext()!;
    UIGraphicsEndImageContext();
    switch indexPath.section {
    case 0:
        let cell = tableView.dequeueReusableCell(withIdentifier: "settingsTitleCell")!
        cell.textLabel?.text = constants.infoTitles[indexPath.row]
        cell.detailTextLabel?.text = constants.infoDetail[indexPath.row]
        cell.imageView?.image = cell.imageView?.image?.cropToBounds(image: constants.infoImages[indexPath.row], width: 30, height: 30)
        return cell
    case 1:
            let cell = tableView.dequeueReusableCell(withIdentifier: "fontCell") as! FontCell
            return cell
    case 2:
        let cell = tableView.dequeueReusableCell(withIdentifier: "settingsTitleCell")!
        cell.textLabel?.text = constants.connectTitles[indexPath.row]
        cell.imageView?.image = cell.imageView?.image?.cropToBounds(image: constants.connectImages[indexPath.row], width: 30, height: 30)
        cell.detailTextLabel?.text = ""
        return cell
    case 3:
        let cell = tableView.dequeueReusableCell(withIdentifier: "settingsTitleCell")!
        cell.textLabel?.text = constants.communityTitles[indexPath.row]
        cell.detailTextLabel?.text = constants.communityDetail[indexPath.row]
        cell.imageView?.image = cell.imageView?.image?.cropToBounds(image: constants.communityImages[indexPath.row], width: 30, height: 30)
        return cell
    default:
        return cell
    }
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 1 {
        return 80
    } else {
        return 45
    }
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    switch indexPath.section {
    case 0:
        if indexPath.row == 0 {
            self.initWebView(url: Bundle.main.url(forResource: "caution", withExtension: "html"), stringUrl: nil, titlePage: constants.infoTitles[indexPath.row])
        } else {
            self.selectTitle = constants.infoTitles[indexPath.row]
            self.performSegue(withIdentifier: "toApps", sender: self)
        }
    case 2:
        self.sendMessage()
        break;
    case 3:
        switch indexPath.row {
        case 0:
            self.initWebView(url: Bundle.main.url(forResource: "about", withExtension: "html"), stringUrl: nil, titlePage: constants.communityTitles[indexPath.row])
            break;
        case 1:
            self.initWebView(url: nil, stringUrl: "https://vk.com/electronicengineer", titlePage: constants.communityTitles[indexPath.row])
        case 2:
            self.initWebView(url: nil, stringUrl: "https://fb.com", titlePage: constants.communityTitles[indexPath.row])
            break;
        default:
            break;
        }
    default:
        break;
    }
}

func initUI() {
    self.title = constants.settings
    self.tableView.tableFooterView = UIView()
}

func initWebView(url:URL?, stringUrl:String?, titlePage:String) {
    if stringUrl != nil {
        self.selectStringUrl = stringUrl!
        self.selectUrl = nil
    } else {
        self.selectUrl = url!
    }
    self.selectTitle = titlePage
    self.performSegue(withIdentifier: "toWeb", sender: self)
}

func sendMessage() {
    let mailComposeViewController = configuredMailComposeViewController()
    if MFMailComposeViewController.canSendMail() {
        self.present(mailComposeViewController, animated: true, completion: nil)
    }
}

func configuredMailComposeViewController() -> MFMailComposeViewController {
    let mailComposerVC = MFMailComposeViewController()
    mailComposerVC.mailComposeDelegate = self
    mailComposerVC.setToRecipients(["postboxapp@yandex.ru"])
    mailComposerVC.setSubject("Электроник на Android")
    mailComposerVC.setMessageBody("", isHTML: false)
    return mailComposerVC
}


func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
    controller.dismiss(animated: true, completion: nil)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = constants.back
    navigationItem.backBarButtonItem = backItem
    if segue.identifier == "toWeb" {
        let vc = segue.destination as! WebController
        vc.fileUrl = self.selectUrl
        vc.url = self.selectStringUrl
        vc.title = self.selectTitle
        self.tabBarController?.tabBar.isHidden = true
    }
    if segue.identifier == "toApps" {
        let vc = segue.destination as! AppsController
        vc.title = self.selectTitle
        self.tabBarController?.tabBar.isHidden = true
    }
}
}
AppView(延迟消失)

第一控制器

class AppsController : UIViewController, iCarouselDataSource, iCarouselDelegate {
let xmlHelper = XmlHelper()
var apps = Apps(data:[App]())
var selectUrl = ""
var selectTitle = ""
var scrollIndex = 0

@IBOutlet var carousel: iCarousel!

override func viewDidLoad() {
    super.viewDidLoad()
    self.carousel.delegate = self
    self.carousel.isPagingEnabled = true
    DispatchQueue.main.async {
        self.initApps()
    }
}

func numberOfItems(in carousel: iCarousel) -> Int {
    return apps.data.count
}

func carousel(_ carousel: iCarousel, viewForItemAt index: Int, reusing view: UIView?) -> UIView {
    let appView: AppView = Bundle.main.loadNibNamed("appView",
                                                    owner: nil,
                                                    options: nil)?.first as! AppView!
    appView.titleLabel?.text = apps.data[index].title
    appView.descLabel?.text = apps.data[index].desc
    appView.frame = CGRect(x:0, y:0, width:self.view.frame.width-30, height:carousel.frame.height-60)
    appView.backgroundColor = UIColor.white

    var shadowLayer: CAShapeLayer!
    shadowLayer = CAShapeLayer()
    shadowLayer.path = UIBezierPath(roundedRect: appView.bounds, cornerRadius: 0).cgPath
    shadowLayer.fillColor = UIColor.white.cgColor

    shadowLayer.shadowColor = UIColor.lightGray.cgColor
    shadowLayer.shadowPath = shadowLayer.path
    shadowLayer.shadowOffset = CGSize(width: 0.0, height: 0.0)
    shadowLayer.shadowOpacity = 0.8
    shadowLayer.shadowRadius = 2

    appView.layer.insertSublayer(shadowLayer, at: 0)

    appView.storeButton.addTarget(self, action: #selector(didTapApp), for: UIControlEvents.touchUpInside)

    DispatchQueue.main.async {
        appView.iconView?.sd_setImage(with: URL(string:self.apps.data[index].icon
            ), completed: { (image, error, cache, url) in
                if error == nil {
                    appView.iconView.image = appView.iconView.image?.cropToBounds(image: image!, width: 30, height: 30)
                }
        })
    }
    return appView
}


func carousel(_ carousel: iCarousel, valueFor option: iCarouselOption, withDefault value: CGFloat) -> CGFloat {
    if (option == .spacing) {
        return value * 1.1
    }
    return value
}


func didTapApp() {
    if self.apps.data.count != 0 {
        UIApplication.shared.open(URL(string: "itms://itunes.apple.com/app/id" + self.apps.data[carousel.currentItemIndex].link)!, options: [:], completionHandler: nil)
    }
}

func initApps() {
    xmlHelper.getAnoutherApps { (apps) in
        if apps != nil{
            self.apps = apps!
            self.carousel.reloadData()
        }
    }
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = constants.back
    navigationItem.backBarButtonItem = backItem
    if segue.identifier == "toWeb" {
        let vc = segue.destination as! WebController
        vc.fileUrl = nil
        vc.url = self.selectUrl
        vc.title = self.selectTitle
        self.tabBarController?.tabBar.isHidden = true
    }
}
class SettingsController : UITableViewController, MFMailComposeViewControllerDelegate {


var selectUrl : URL?
var selectTitle = ""
var selectStringUrl = ""

override func viewDidLoad() {
    super.viewDidLoad()
    self.initUI()
}

override func numberOfSections(in tableView: UITableView) -> Int {
    return 4
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    switch section {
    case 0:
        return 2
    case 1:
        return 1
    case 2:
        return 1
    case 3:
        return 3
    default:
        return 0
    }
}

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    switch section {
    case 0:
        return constants.info
    case 1:
        return constants.settings
    case 2:
        return constants.connect
    case 3:
        return constants.community
    default:
        return ""
    }
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "settingsTitleCell")!
    let itemSize = CGSize(width:30, height:30);
    UIGraphicsBeginImageContextWithOptions(itemSize, false, UIScreen.main.scale);
    let imageRect = CGRect(x:0.0, y:0.0, width:itemSize.width, height:itemSize.height);
    cell.imageView?.image!.draw(in: imageRect)
    cell.imageView?.image! = UIGraphicsGetImageFromCurrentImageContext()!;
    UIGraphicsEndImageContext();
    switch indexPath.section {
    case 0:
        let cell = tableView.dequeueReusableCell(withIdentifier: "settingsTitleCell")!
        cell.textLabel?.text = constants.infoTitles[indexPath.row]
        cell.detailTextLabel?.text = constants.infoDetail[indexPath.row]
        cell.imageView?.image = cell.imageView?.image?.cropToBounds(image: constants.infoImages[indexPath.row], width: 30, height: 30)
        return cell
    case 1:
            let cell = tableView.dequeueReusableCell(withIdentifier: "fontCell") as! FontCell
            return cell
    case 2:
        let cell = tableView.dequeueReusableCell(withIdentifier: "settingsTitleCell")!
        cell.textLabel?.text = constants.connectTitles[indexPath.row]
        cell.imageView?.image = cell.imageView?.image?.cropToBounds(image: constants.connectImages[indexPath.row], width: 30, height: 30)
        cell.detailTextLabel?.text = ""
        return cell
    case 3:
        let cell = tableView.dequeueReusableCell(withIdentifier: "settingsTitleCell")!
        cell.textLabel?.text = constants.communityTitles[indexPath.row]
        cell.detailTextLabel?.text = constants.communityDetail[indexPath.row]
        cell.imageView?.image = cell.imageView?.image?.cropToBounds(image: constants.communityImages[indexPath.row], width: 30, height: 30)
        return cell
    default:
        return cell
    }
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 1 {
        return 80
    } else {
        return 45
    }
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    switch indexPath.section {
    case 0:
        if indexPath.row == 0 {
            self.initWebView(url: Bundle.main.url(forResource: "caution", withExtension: "html"), stringUrl: nil, titlePage: constants.infoTitles[indexPath.row])
        } else {
            self.selectTitle = constants.infoTitles[indexPath.row]
            self.performSegue(withIdentifier: "toApps", sender: self)
        }
    case 2:
        self.sendMessage()
        break;
    case 3:
        switch indexPath.row {
        case 0:
            self.initWebView(url: Bundle.main.url(forResource: "about", withExtension: "html"), stringUrl: nil, titlePage: constants.communityTitles[indexPath.row])
            break;
        case 1:
            self.initWebView(url: nil, stringUrl: "https://vk.com/electronicengineer", titlePage: constants.communityTitles[indexPath.row])
        case 2:
            self.initWebView(url: nil, stringUrl: "https://fb.com", titlePage: constants.communityTitles[indexPath.row])
            break;
        default:
            break;
        }
    default:
        break;
    }
}

func initUI() {
    self.title = constants.settings
    self.tableView.tableFooterView = UIView()
}

func initWebView(url:URL?, stringUrl:String?, titlePage:String) {
    if stringUrl != nil {
        self.selectStringUrl = stringUrl!
        self.selectUrl = nil
    } else {
        self.selectUrl = url!
    }
    self.selectTitle = titlePage
    self.performSegue(withIdentifier: "toWeb", sender: self)
}

func sendMessage() {
    let mailComposeViewController = configuredMailComposeViewController()
    if MFMailComposeViewController.canSendMail() {
        self.present(mailComposeViewController, animated: true, completion: nil)
    }
}

func configuredMailComposeViewController() -> MFMailComposeViewController {
    let mailComposerVC = MFMailComposeViewController()
    mailComposerVC.mailComposeDelegate = self
    mailComposerVC.setToRecipients(["postboxapp@yandex.ru"])
    mailComposerVC.setSubject("Электроник на Android")
    mailComposerVC.setMessageBody("", isHTML: false)
    return mailComposerVC
}


func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
    controller.dismiss(animated: true, completion: nil)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = constants.back
    navigationItem.backBarButtonItem = backItem
    if segue.identifier == "toWeb" {
        let vc = segue.destination as! WebController
        vc.fileUrl = self.selectUrl
        vc.url = self.selectStringUrl
        vc.title = self.selectTitle
        self.tabBarController?.tabBar.isHidden = true
    }
    if segue.identifier == "toApps" {
        let vc = segue.destination as! AppsController
        vc.title = self.selectTitle
        self.tabBarController?.tabBar.isHidden = true
    }
}
}
解决的问题:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    self.carousel.isHidden = true
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    self.carousel.isHidden = false
}
解决的问题:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    self.carousel.isHidden = true
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    self.carousel.isHidden = false
}

隐藏和取消隐藏只是解决实际问题的一种方法


同样,设置yourCarousel.clipsToBounds=true

隐藏和取消隐藏只是解决实际问题的一种方法


如图所示,设置yourCarousel.clipsToBounds=true

显示代码。“没有人可以仅在这些信息上帮助您。@ParthoBiswas,请参阅更新代码显示代码。”。“没有人可以仅在这些信息上帮助您。@ParthoBiswas,请参阅更新代码。”