Swift로 시각 프로그래밍

8971 단어 Swift
나는 Swift에서 Processing처럼 스케치하고 싶지만 전혀 방법이 없다
몰라서 간단한 걸 만들었어요.
그나저나 다들 스위프트에서 어떻게 했어요?
겸사겸사 말씀드리겠습니다.
스위프트는 아직 OpenGLES에 완전히 대응하지 않은 것으로 보인다.orz(이걸로 하면 원래 괜찮아)
Metal 정보가 너무 적어서 좌절했습니다.
Core Animation 전혀 몰라요. Tween 계열이에요?설치, 그래서 이것도 빼.
SpriteKit도 CA와 마찬가지로 사용하기 어려워서 수리하지 않습니다
코드 여기 있습니다.
https://github.com/SuguruSasaki/SwiftProcessing

구조


CoreGraphics에는 베지퍼스라는 반이 있기 때문에 이걸 씁니다.
아직 CALayer의 존재를 잘 모르기 때문에 UIView에서 BezierPath로 그립니다.

사용법


이번에 우리는 아래의 그림처럼 점을 그려서 이동할 것이다.

프레임 처리


Processing과 OpenFrameworks의 업데이트/draw처럼 일정한 간격으로 호출하기를 바랍니다
ViewController에서 EnterFrameBeacon 인스턴스를 만듭니다.
self._beacon = EnterFrameBeacon()
self._beacon.initialize(fps: 60.0)      // FPS設定
self._beacon.addEventListener(self)     // Delegate設定
EnterFrame Beacon은 initialize가 설정한 프레임 속도로 알려 줍니다.
알림을 받기 위해 addeventListener로 청중을 등록합니다.
알림을 받으려면 ViewController에서 EnterFrame Delegate 프로토콜을 설정합니다.
class ViewController: UIViewController, EnterFrameDelegate{
다음은 업데이트 방법을 실시합니다.
func update {

}
이렇게 하면 통지를 받을 수 있다.

Canvas 만들기


드로잉 영역을 생성합니다.Canvas App 클래스를 상속하는 하위 클래스를 만듭니다.
이번엔 My Canvas.init, 업데이트, draw를 추가합니다.
required init(coder aDecoder: NSCoder) {
  super.init(coder: aDecoder)
}

override init(frame: CGRect, clearColor: UIColor) {
  super.init(frame: frame, clearColor: clearColor)
}

override update(){

}

override draw(){

}
업데이트/draw에 이 코드를 써서 테스트를 할 수 있습니다.

점을 표시합니다.


우선 움직여 보고 싶어서 표시를 좀 해 보세요.
My Canvas init 내에서 Partical 을 만듭니다.Partical은 좌표만 관리합니다.
for var i = 0; i < 200; ++i {
  var px: CGFloat = Math.randomBetweenNumbers(0.0, secondNum: self.frame.width)
  var py: CGFloat = Math.randomBetweenNumbers(0.0, secondNum: self.frame.height)
  var p: Particle = Particle(center: CGPointMake(px, py))

  var vx: CGFloat = Math.randomBetweenNumbers(-5.0, secondNum: 5.0)
  var vy: CGFloat = Math.randomBetweenNumbers(-5.0, secondNum: 5.0)
  p.setVelocity(vx, y: vy)
  self._particles.append(p)
}
드로잉에 점을 그립니다.
 var max = self._particles.count
 for var i = 0; i < max; ++i {
   var p: Particle = self._particles[i] as Particle
   DrawCircle.draw(p, radius: CGFloat(3.0), strokeColor: UIColor.redColor(), fillColor: UIColor.redColor())
 }
이렇게 하면 완성된다.
그리고github 코드를 참고하세요.
만약 다른 좋은 방법을 아는 사람이 있다면 나에게 알려주세요!

좋은 웹페이지 즐겨찾기