代码之家  ›  专栏  ›  技术社区  ›  James D. Schwartz

从数组中的NSValue获取CGPoint值

  •  0
  • James D. Schwartz  · 技术社区  · 10 年前

    试图从我的 allCenters 数组,其中包含 NSValues 它们最初从CGPoints转换为NSValues。我知道这段代码正是我想做的,但我想它在SWIFT 2中是行不通的: CGPoint randLoc = [[allCenters objectsAtIndex: randLocInt] CGPointValue] . 在重写函数之前,我需要最后一行代码的帮助。

    import UIKit
    import Foundation
    var tiledViewsStack = [AnyObject]()
    
    class PhotoViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
        //Choose an image from Photo Library and display on screen in displayImageView
    
        @IBOutlet weak var displayImageView: 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)
        }
    
    
    
        //Cut photo into 9 tiles
        //Cut selected image into 9 pieces and add each cropped image to tileImageStack array
    
        var tileImageStack = [AnyObject]()
    
        @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!)
                        tileImageStack.append(aUItile)
                    }
                }
            }
    
            //Display tiles in order on screen, then mix them up randomly
    
            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
            var allCenters = [NSValue]()
    
            for (var v = 0; v < 3; v += 1)
            {
                for (var h = 0; h < 3; h += 1)
                {
                    let tiledView = UIImageView(frame:CGRectMake(0, 0, frameWidth/3, (frameHeight)/3))
                    var curCenter = CGPointMake(xCen, yCen)
                    allCenters.append(NSValue(CGPoint:curCenter))
                    //tiledView.backgroundColor = UIColor.redColor()
                    tiledView.center = curCenter
                    tiledView.image = tileImageStack[pieceNumber] as? UIImage
                    tiledView.userInteractionEnabled = true
                    tiledViewsStack.append(tiledView)
                    self.view.addSubview(tiledView)
                    xCen += (frameWidth/3)
                    pieceNumber += 1
                }
                xCen = (frameWidth/3)/2
                yCen += (frameHeight/3)
            }
    
            tiledViewsStack[0].removeFromSuperview()
            tiledViewsStack.removeAtIndex(0)
            //Now there are 8 imageViews in the tiledViewsStack array, and 9 centers stored in allCenters array.
        }
    
        var randLocInt = Int((arc4random()*10) % 9) // 0, --- 8
    
        //CGPoint randLoc = [[allCenters objectsAtIndex: randLocInt] CGPointValue]
        var randLoc = CGPointFromValue(allCenters[randLocInt])
    
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Do any additional setup after loading the view.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }        
    }
    

    enter image description here

    1 回复  |  直到 10 年前
        1
  •  1
  •   vadian    10 年前

    如果 allCenters 始终包含 NSValue 对象为什么要将其声明为完全未指定的 [AnyObject] ?

    帮助编译器,编译器将帮助您

    var allCenters = [NSValue]()
    
    ...
    
    let randLoc = allCenters[randLocInt].CGPointValue()
    

    并声明 所有中心 在…内 班级

    推荐文章