I am instantiating a playground live view using the following code:
import UIKit
import PlaygroundSupport
let view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
view.backgroundColor = .white
PlaygroundPage.current.liveView = view
The live view that appears is stuck to the top of the screen and I can't change it's location by changing the x and y values of the frame. How do I get the view to move/center on my screen?
Photo of how it comes out:
I am using the below to create a gradient view that is visible in IB:
import UIKit
import QuartzCore
#IBDesignable
class FAUGradientView: UIView {
#IBInspectable var firstColor:UIColor = UIColor.clear
#IBInspectable var secondColor:UIColor = UIColor.clear
#IBInspectable var startPoint:CGPoint = CGPoint(x: 0.0, y: 1.0)
#IBInspectable var endPoint:CGPoint = CGPoint(x: 1.0, y:0.0)
var gradientLayer:CAGradientLayer!
override func draw(_ rect: CGRect) {
super.draw(rect)
gradientLayer = CAGradientLayer()
self.gradientLayer.colors = [firstColor, secondColor]
self.gradientLayer.startPoint = self.startPoint
self.gradientLayer.endPoint = self.endPoint
self.gradientLayer.frame = self.frame
self.layer.addSublayer(self.gradientLayer)
}
}
However, what I get in IB is a solid black view, not a view with a two color gradient, as seen below:
Solved it. They need to be cgColors, but XCode doesn't give you a single error to indicate that.
[firstColor.cgColor, secondColor.cgColor]
The above fixes the issue.
Works well, but;
self.gradientLayer.frame = self.frame
should be
self.gradientLayer.frame = self.bounds
or you can get some very odd draw offsets depending on where the view is within the parent
I'm unable to load a scene in XCode 7 beta 3 playground... although it was working with Xcode 6.4.... is it bug or something as changed ?
ps : SCNScene(named: "ship.dae") returns nil.
In my Resources folder is ship.dae and texture.png (from the SceneKit template), and here is my code :
//: Playground - noun: a place where people can play
import SceneKit
import XCPlayground
var view = SCNView(frame: NSRect(x: 0, y: 0, width: 500, height: 500))
var scene = SCNScene(named: "ship.dae")
view.scene = scene
XCPShowView("view", view: view)
In Xcode 7
import XCPlayground
let view = // your view
XCPlaygroundPage.currentPage.liveView = view
In Xcode 8
import PlaygroundSupport
let view = // your view
PlaygroundPage.current.liveView = view
Just started to learn Swift. I’ve created a macOS app project using the Xcode 6 Beta 6. Now I want to use the ViewController.swift to draw a colored rectangle (for testing purposes) in the apps main view (a NSWindow within the Main.storyboard).
I’ve tried this:
override func viewDidLoad() {
let myRect = NSView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
myRect!.backgroundColor = NSColor.redColor().CGColor // app crashes here
self.view.addSubview(myRect)
}
The app crashed in the third line: EXC_BAD_INSTRUCTION.
Not only Swift but also Xcode is totally new to me and I would appreciate any help.
It’s been a while since I asked this question but I noticed that it got a lot of views recently, so providing an actual answer (Swift 4.2) might be helpful for a bunch of people:
override func viewDidLoad() {
let myFrame = NSRect(x: 0.0, y: 0.0, width: 200.0, height: 200.0)
let myRect = NSView(frame: myFrame)
myRect.backgroundColor = NSColor.red
self.view.addSubview(myRect)
}
Try putting the code in ViewDidAppear instead...
you are trying to draw a rectangle on a view which hasn't been displayed yet.
I think you missed to add the following before setting the background color:
theRectangle.wantsLayer = true
I tried to create a UILabel in playground but failed. Does playground only support OS X development for now?
YES, it does!
File: New > File... > iOS > Source > Playground
import UIKit
let lbl = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 100))
lbl.text = "Hello StackOverflow!"
Then, save the file. (Or manually run it.) This will trigger the Playground to interpret UI related things. At this point, the word "UILabel" should appear on the right-hand side.
Now, to actually view what you've done, you've got to click on the "Quick View" eye on the right, or the white circle to open it in Assistant Editor:
Here's a screenshot of some basic things with UIImage working, etc.
(EDIT: minor text update to current CGRect syntax -- But, screenshots still show old syntax.)
Edited#2014-11-13: It seems the new xcode 6 had fixed this.
NO, It doesn't. But it's worth noting that you can import UIKit.
If you want to import UIKit you cound follow this:
View -> Utilities -> Show File Inspector (opt + cmd + 1)
On the right side of Xcode Change “Playground Settings -> Platform” from OS X to iOS
then you could import UIKit or some module for iOS
ps. I try to create a UIImageView but it doesn't show the correct image on the right side. It seem worthless to import UIKit
In Xcode 7, now you can't use the Quick Look to see the appearance of a UIView.
Instead, use the Assistant Editor and:
XCPlaygroundPage.currentPage.liveView = sampleView
Like this:
import XCPlayground
import UIKit
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
// Simulate User Interaction, not available in Xcode 7.2
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
let color = UIColor(red: 1, green: 1, blue: 0, alpha: 1)
let leftMargin = 20
let view = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 667)) // iPhone 6 proportions
view.backgroundColor = UIColor.grayColor()
// LABEL
let label = UILabel(frame: CGRect(x: leftMargin, y: 5, width: 300, height: 44))
label.text = "Hello, playground"
label.textColor = UIColor.whiteColor()
view.addSubview(label)
// TEXTFIELD
let textField = UITextField(frame: CGRect(x: leftMargin, y: 60, width: 300, height: 44))
textField.placeholder = "Edit me…"
textField.backgroundColor = UIColor(white: 1, alpha: 0.5)
textField.textColor = UIColor.whiteColor()
textField.userInteractionEnabled = true
view.addSubview(textField)
XCPlaygroundPage.currentPage.liveView = view
delay(1.0) { () -> () in
textField.text = "New text!"
}
In Xcode 8 XCPlaygroundPage.currentPage.liveView is deprecated. Instead, use
import PlaygroundSupport
PlaygroundPage.current.liveView = view
Press CMD+Option+1 and change the platform to iOS, this will allow you to import UIKit.
I found I could add a new playground file in IOS project, and in that file I can import UIKit.
please use Command (⌘) + Option(⌥) + 1 combination to switch to iOS platform from OSX in playground to use UIKit .
Most simple solution:
Xcode 9.2
Start with a new Single View playground:
show Assistance Editor: View -> Assistance Editor -> Show Assistance Editor.
here you go. By default you will see printed property: label.text = "Hello World!" in the Live View window
Press Option+Cmd+1 and choose iOS in the Platform setting. Then you can import UIKit and play~
Yeah looks like it doesn't support UIkit yet.
Update:
When i wrote this answer in 2014 it didn't support UIKit, now it does. Leaving this for historical reference
Edit:
Actually above answer is incorrect.
You can create iOS project and add new .playground file inside that project. Then you can import Uikit or another iOS specific framework.