2016-04-08 8 views
0

allCenters配列からCGPoint値を抽出しようとしています(NSValuesを含む)。最初はCGPointsからNSValuesに変換されました。私はこのコードが私がやろうとしていることを知っていますが、SWIFT 2では動作しないと思います。CGPoint randLoc = [[allCenters objectsAtIndex: randLocInt] CGPointValue] オーバーライド関数の前に、コードの最後の行でヘルプが必要です。配列内のNSValueからCGPoint値を取得します

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

allCentersは常に、あなたはかなりの不特定[AnyObject]としてそれを宣言しない理由NSValueオブジェクトが含まれている場合は?コンパイラとコンパイラはあなたに

var allCenters = [NSValue]() 

... 

let randLoc = allCenters[randLocInt].CGPointValue() 

を助け、内部allCentersクラス

+0

良い点を宣言し、感謝します

ヘルプ。私はまだエラーが発生します:未解決の識別子 "CGPointFromValue"の使用。私はまた試みました: 'var randLoc = CGPoint(allCenters [randLocInt])'、しかし、このエラーを受け取ります: "インスタンスメンバー 'randLocInt'は 'PhotoViewController'タイプでは使用できません" –

+0

関数 'CGPointFromValue'はありません。私の更新された答えを見てください。 – vadian

+0

私はまだ "インスタンスメンバー 'randLocInt'は 'PhotoViewController'型では使用できません" –

関連する問題