【问题标题】:Remove a UIView stored in an array from superview从超级视图中删除存储在数组中的 UIView
【发布时间】:2016-03-30 21:51:53
【问题描述】:

我知道我需要的代码是 [[Array objectAtIndex:index] removeFromSuperview];,但这在 Swift 2 中不起作用。

我正在尝试从超级视图中删除存储在数组中的 UIView。我知道我想删除索引 0 处的对象。想在 for 循环结束时删除它。 哪些代码可以在 Swift 中运行?

导入 UIKit 导入基金会

类 PhotoViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

var tileStack = [AnyObject]()
let num = 0


//Beginning of simple image selection and display

@IBOutlet weak var displayImageView: UIImageView!
@IBOutlet weak var tiledView: UIImageView!

@IBAction func choosePicFromLibrary(sender: AnyObject) {
    let imagePicker: UIImagePickerController = UIImagePickerController()

    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    imagePicker.delegate = self
    imagePicker.modalPresentationStyle = UIModalPresentationStyle.Popover

    if (imagePicker.popoverPresentationController != nil) {
        imagePicker.popoverPresentationController!.sourceView = sender as! UIButton
        imagePicker.popoverPresentationController!.sourceRect = (sender as! UIButton).bounds
    }
    presentViewController(imagePicker, animated: true, completion: nil)
}

@IBAction func takePhoto(sender: AnyObject) {
    let imagePicker: UIImagePickerController = UIImagePickerController()

    imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
    imagePicker.delegate = self
    imagePicker.modalPresentationStyle = UIModalPresentationStyle.Popover

    if (imagePicker.popoverPresentationController != nil) {
        imagePicker.popoverPresentationController!.sourceView = sender as! UIButton
        imagePicker.popoverPresentationController!.sourceRect = (sender as! UIButton).bounds
    }
    presentViewController(imagePicker, animated: true, completion: nil)
}


func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    dismissViewControllerAnimated(true, completion: nil)
    displayImageView.image = info[UIImagePickerControllerOriginalImage] as! UIImage!
}

func imagePickerControllerDidCancel(picker: UIImagePickerController) {
    dismissViewControllerAnimated(true, completion: nil)
}



//Beginning of function to cut photo into 9 tiles, then display them randomly.

//cut selected image into 9 pieces and add each cropped image to tileStack array

@IBAction func randomize(sender: AnyObject) {


let selectedImageWidth = displayImageView.image!.size.width
let selectedImageHeight = displayImageView.image!.size.height

let tileSize = CGSizeMake(selectedImageWidth/3, selectedImageHeight/3)

    for (var colI = 0; colI < 3; colI++)
    {
        for (var rowI = 0; rowI < 3; rowI += 1)
        {
            let tileRect = CGRectMake(CGFloat(rowI) * tileSize.width, tileSize.height * CGFloat(colI), tileSize.width, tileSize.height)

            if let selectedImage = displayImageView.image
            {
                let tileImage = CGImageCreateWithImageInRect(selectedImage.CGImage, tileRect)
                let aUItile = UIImage(CGImage: tileImage!)
                tileStack.append(aUItile)
            }

        }
    }


    //display tiles in order on screen, remove 1 tile (top left, index 0), (eventually mix them up)
    let frameWidth = self.view.frame.width
    let frameHeight = self.view.frame.height

    var xCen = (frameWidth/3)/2
    var yCen = (frameHeight/3)/2

    var pieceNumber = 0


    for (var v = 0; v < 3; v += 1)
    {
        for (var h = 0; h < 3; h += 1)
        {
            var tiledView : UIImageView
            tiledView = UIImageView(frame:CGRectMake(0, 0, frameWidth/3, (frameHeight)/3))
            //tiledView.backgroundColor = UIColor.redColor()
            tiledView.center = CGPointMake(xCen, yCen)
            tiledView.image = tileStack[pieceNumber] as? UIImage
            tiledView.userInteractionEnabled = true
            self.view.addSubview(tiledView)
            xCen += (frameWidth/3)
            pieceNumber += 1
        }
        xCen = (frameWidth/3)/2
        yCen += (frameHeight/3)
    }
    tileStack[0].removeFromSuperview()
    tileStack.removeAtIndex(0)
}

【问题讨论】:

    标签: objective-c swift uiview uiimageview swift2


    【解决方案1】:

    在 Swift 2.0 中,您需要从要删除的对象中调用 removeFromSubview。在您的情况下,您需要以下内容:

    dispatch_async(dispatch_get_main_queue(), { 如果 self.view.subviews.count > 0 { self.view.subviews[0].removeFromSuperview() } })

    【讨论】:

    • 我尝试使用tileStack[0].removeFromSuperview(),但应用程序崩溃并将我带到 AppDelegate 行(见我上面添加的屏幕截图)。您首先提到了 SUBview——我应该使用它吗?
    • 你需要删除这些行:tileStack[0].removeFromSuperview() tileStack.removeAtIndex(0)
    • 好的,我得到:“'PhotoViewController' 类型的值没有成员“子视图”
    • 我更新了我的答案并添加了一些检查。您能否也发布其余代码,以便我更好地理解您的代码。谢谢。
    • @ChristianAbella 我意识到我只是将 UIImages 存储在一个数组中,而不是它们的 UIImageViews。因此,我无法从数组中删除 UIImageView,因为我从未创建数组来存储它们!问题解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多