2017-03-18 6 views
0

NSViewに配列の内容を渡して、長方形xの位置を表示しようとしています。 私は乱数とボタンを使ってバージョンをセットアップし、コードを最小限に減らしましたので、うまくいけば読みやすくなります。私は配列をグローバル変数として作成しようとしました。私もこの答えからコードを逆にしようとしました。 Pass data between view controllers。私はコメントを挿入しました:"これは達成したいことです"私は達成しようとしていることを説明します。 誰かが助けてくれることを望んでいますか?おかげNSViewに変数を渡す

スウィフト3のXcode 8.1 OSXのMac OSではないのiOSあなたがNSViewのサブクラスへの強い参照を持っているので、単にプロパティを追加

// 
// MainWindowController.swift 

import Cocoa 
class MainWindowController: NSWindowController { 
    @IBOutlet weak var myView: NSView! 
    var myArray = [Int]() 
    override func windowDidLoad() { 
     super.windowDidLoad() 
     //just for testing 
     for i in 0..<6{ 
      myArray.append(i*10) 
     } 
    }//EO Overide 

    //just for testing 
    @IBAction func myButton(_ sender: AnyObject) { 
     myFunc() 
    } 

    func myFunc(){ 
     for i in 0..<6{ 
      let diceRoll = Int(arc4random_uniform(6) + 1) 
      myArray[i]=diceRoll * 10 
     } 

     myView.needsDisplay = true 

    }//EO myFunc 
}//EnD oF thE wORld 



class myGUI: NSView { 

    override func draw(_ dirtyRect: NSRect) { 

     for i in..<6{ 
    let fromArray = myArray[i] 
      let box1 = NSMakeRect(CGFloat(fromArray),0,4,60)//This is what i want to do 
      let box1Color = NSColor(red: 0.4, green: 0.4, blue: 0.4, alpha: 1.0) 
      let box1Path: NSBezierPath = NSBezierPath(rect: box1) 
      box1Color.set() 
      box1Path.fill() 

     }//EO For 

    }} 

答えて

0

class myGUI: NSView { 

    var xPosArray = [Int]()  

    override func draw(_ dirtyRect: NSRect) { 
     for xPos in xPosArray { // please avoid ugly C-style index based loops 
      let box1 = NSMakeRect(CGFloat(xPos), 0, 4, 60) 
    ... 

を、単純にそれを設定しますビューコントローラ

func myFunc(){ 
    for i in 0..<6 { 
     let diceRoll = Int(arc4random_uniform(6) + 1) 
     myArray[i]=diceRoll * 10 
    } 
    myView.xPosArray = myArray 
    myView.needsDisplay = true 
} 

クラス名は、 大文字。

+0

クラス名と醜いループについて私は注意します。私はループスタイルが存在することを知らなかった(自己教えられた)私はエラーを受け取りました。 "タイプ 'NSView'の値にメンバ 'array'がありません"ありがとう – oldman

+0

Interface Builderでは、カスタムビューのクラスを 'myGUI'に設定する必要があります – vadian

+0

myGUIビューのクラスをまだ運行していません – oldman