・2016/12/26
Xcode SWIFTで Mac OSX用のスクリーンマスコットアプリを作る
(Mac OS X用アプリを Swift言語で作る方法、デスクトップ画面に画像をオーバーレイで描画する方法)
Tags: [Apple], [MacBook]
● Xcode 7.3.1 Swift 2.2.1で OS X用のアプリを作る
・CatAndDogRun 猫と犬 走る デスクトップ常駐マスコットアプリ for Mac OSX

・「Android CatAndDogRun 猫と犬 走る スマホ初!ステータスバー常駐 マスコット アプリ!」の猫の画像(フリー素材

Welcome to Swift.org
ここでは、Xcode 7.3.1 Swift 2.2.1を使用してアプリを作ります。
●必要な実装処理内容の一覧
主な実装処理
・画面のサイズを取得する
・透明なウィンドウを作成する(Windowの背景を透過する)
・透明なウィンドウを前面に配置(スクリーンセーバーと同じ Zオーダーに描画する)
・透明なウィンドウでクリック等の UI操作を無効にする(マウス操作を無効化)
・Windowのタイトルバーを非表示にする
・描画内容全体を半透明化する
・リソースに定義した画像を NSImageに読み込む
・画像の一部分を切り出して指定範囲に描画する
・Windowを最前面に表示
・画像をアスペクト比を保持して拡大縮小して表示する
・一定間隔で画像描画を更新する(アニメーションさせる)
・NSImageを CGImageに変換する
(NSナントカの NSは NeXTSTEPの略)
(CGナントカの CGは Core Graphicsの略)
サンプルのアニメ画像として「Android CatAndDogRun 猫と犬 走る スマホ初!ステータスバー常駐 マスコット アプリ!」の猫の画像(フリー素材)を使用します。
・2011/10/08
Android CatAndDogRun 猫と犬 走る スマホ初!ステータスバー常駐 マスコット アプリ!
Cat and Dog Run 猫と犬が画面に常駐して走る癒し系ジョークアプリです。
(本当は Mac GoGoのねーちゃん画像をと思ったが自主規制した。)
・「Android CatAndDogRun 猫と犬 走る スマホ初!ステータスバー常駐 マスコット アプリ!」の猫の画像(フリー素材

猫の画像は 6枚のアニメーション画像を 1枚に結合しています。
アプリで描画する際は 6分割してその 1区画を抜き出してタイマーで描画します。
上下左右に動く様にすれば「Android 東方Projectのキャラクタが勢揃いしてスマートフォンのステータスバーや画面内を歩きます」も作れます。
・2011/10/05
Android 東方Projectのキャラクタが勢揃いしてスマートフォンのステータスバーや画面内を歩きます
シューティング ゲームの東方Projectのキャラクタがアンドロイド携帯を歩く常駐マスコット アプリ
// Copyright (c) 2016 FREE WING,Y.Sakamoto. All rights reserved.
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
var displaySize: NSRect? = nil
var pitchX: CGFloat = 0.0;
var imageView: NSImageView? = nil
var viewWidth: CGFloat = 0
var viewHeight: CGFloat = 0
var image: NSImage? = nil
var imageWidth: CGFloat = 0
var imageHeight: CGFloat = 0
var imagePosition = 0
// アニメーションパターンの数(画像連結数)
let numberOfImage = 6
// アプリ開始時の処理
func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application
initializeWindow()
imagePosition = 0
// ・一定間隔で画像描画を更新する(アニメーションさせる)
// 60ms間隔で実行(アニメーション間隔)
NSTimer.scheduledTimerWithTimeInterval(0.06, target: self, selector: #selector(AppDelegate.updateImageView), userInfo: nil, repeats: true)
}
// アプリ終了時の処理
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
// 初期化
func initializeWindow()
{
// ・画面のサイズを取得する
// visibleFrame = 1326, 745
displaySize = NSScreen.mainScreen()?.visibleFrame
// frame = 1366, 768
displaySize = NSScreen.mainScreen()?.frame
Swift.print(String(format: "displaySize %4.0lf %4.0lf", displaySize!.width, displaySize!.height))
// ・Windowのタイトルバーを非表示にする
// Windowのタイトルバーを非表示にする(xibで設定する)
// window.titleVisibility = NSWindowTitleVisibility.Hidden
// ・透明なウィンドウを作成する(Windowの背景を透過する)
// Window背景を透過するおまじない
window.opaque = false
// Window背景を透過する
window.backgroundColor = NSColor.clearColor()
// ・透明なウィンドウを前面に配置(スクリーンセーバーと同じ Zオーダーに描画する)
// Window Layers and Levels
// Z orderを Screen Saverと同じにする
window.level = Int(CGWindowLevelForKey(CGWindowLevelKey.ScreenSaverWindowLevelKey))
// ・描画内容全体を半透明化する
// タイトルバーを含む全体を半透明
window.alphaValue = CGFloat(0.7)
// ・透明なウィンドウでクリック等の UI操作を無効にする(マウス操作を無効化)
// マウス操作を無効(表示するだけで UI操作を妨害しない)
window.ignoresMouseEvents = true
// // マウス操作で動かせる様にする
// window.movableByWindowBackground = true
// ・リソースに定義した画像を NSImageに読み込む
// アニメーションの連結画像をリソースから読み込む
// http://www.neko.ne.jp/~freewing/tmp/MacGoGoDance.png
// 2500 * 228 px
// ImageCatの名前でリソースに画像を定義しておく
image = NSImage(named: "ImageCat")
// 読み込んだ画像のサイズ(NSImageの sizeは dpに依存する)
// let imageSize = (image?.size)!
// 読み込んだ画像サイズ NSBitmapImageRepの sizeは dpに依存しないので安全)
let bitmapImageRef = NSBitmapImageRep(data:image!.TIFFRepresentation!)!
let imageSize = (bitmapImageRef.size)
Swift.print(String(format: "imageSize %4.0lf %4.0lf", imageSize.width, imageSize.height))
// 1画像あたりのサイズを代入
imageWidth = imageSize.width / CGFloat(numberOfImage)
imageHeight = imageSize.height
let scale: CGFloat = 3.2
viewWidth = imageWidth * scale
viewHeight = imageHeight * scale
// NSImageViewを指定のサイズで生成
imageView = NSImageView(frame: NSMakeRect(0.0, 0.0, viewWidth, viewHeight))
// ・画像をアスペクト比を保持して拡大縮小して表示する
// アスペクト比を保持して拡大縮小
imageView?.imageScaling = NSImageScaling.ScaleProportionallyUpOrDown
// Windowsのサイズを画像と同じ大きさにする
window.setContentSize(NSSize(width: displaySize!.width, height: viewHeight))
// // ウインドウをスクリーンの中心に配置
// window.center()
// ウインドウをスクリーンの下端に配置
window.setFrameOrigin(CGPoint(x: 0, y: 0))
// NSImageViewを Windowに追加
window.contentView!.addSubview(imageView!)
// ・Windowを最前面に表示
// 前面に表示
window.orderFront(self)
// 表示
window.makeKeyAndOrderFront(self)
// 動かすドット数 X軸
pitchX = CGFloat(floatLiteral: Double(displaySize!.width + imageWidth) / 256.0)
if (pitchX < 1.0) {
pitchX = 1.0
}
}
// 画像更新メソッド
func updateImageView()
{
// 表示画像を更新
displayImage(imagePosition)
// 次に表示する画像 index
imagePosition += 1
if (imagePosition >= numberOfImage) {
imagePosition = 0
}
// 画像の表示位置を徐々に移動する
var x = imageView!.frame.origin.x
x -= CGFloat(pitchX)
if (x >= displaySize!.width) {
x = -viewWidth
}
else
if (x < -viewWidth) {
x = displaySize!.width - CGFloat(pitchX)
}
imageView!.frame.origin.x = x
}
func displayImage(position: Int)
{
// ・画像の一部分を切り出して指定範囲に描画する
// 切り出す画像の範囲を設定
let rect: CGRect = CGRectMake(CGFloat(position) * imageWidth, 0, imageWidth, imageHeight)
// ・NSImageを CGImageに変換する
// NSImageを CGImageに変換する
let cgImage = image!.CGImageForProposedRect(nil, context: nil, hints: nil)!
// CGImageの指定範囲を取り出す
let imageRef: CGImageRef = CGImageCreateWithImageInRect(cgImage, rect)!
// boundsは既に Viewの初期化の時に設定してあるので不要
// imageView!.bounds = rect
// NSImageViewに画像をセットして表示
imageView!.image = NSImage(CGImage: imageRef, size: CGSize(width: imageWidth, height: imageHeight))
}
● Windowのタイトルバーを非表示にする
・Mac OSX Xcode Windowのタイトルバーを非表示にする(xibで設定する)

●GoGo!って名前のぱつきんのおねえさんが踊るソフト
以前 Androidで作成した「昔マックのデスクアクセサリにあった確かGoGo!って名前のぱつきんのおねえさんが踊るソフト」を現代の Macに甦らせてみます。
・2011/11/23
Android 昔マックのデスクアクセサリにあった確かGoGo!って名前のぱつきんのおねえさんが踊るソフト
マックのOSがシステム6.0.Xの頃のデスクトップ アクセサリ「Go Go!」
Tags: [Apple], [MacBook]
●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)
Xcodeで Mac OSX用のクリップボード共有&履歴アプリを作る
Mac OS X用アプリを Swift言語で作る方法、MacOSXでクリップボード監視で変化が有ったら取得
Xcode SWIFTで Mac OSX用のスクリーンキャプチャアプリ&画像保存を作る
Mac OS X用アプリを Swift言語で作る方法、デスクトップの画像をキャプチャする方法
Xcode SWIFTで Mac OSX用のスクリーン拡大鏡アプリを作る
Mac OS X用アプリを Swift言語で作る方法、マウスカーソルの位置をリアルタイムで取得する方法
Xcode SWIFTで Mac OSX用の Finderからドラッグ&ドロップを受け付けるアプリを作る
Mac OS X用アプリを Swift言語で作る方法、ドラッグ&ドロップを受け付ける方法
Xcodeで Mac OSX用の使えそうな処理を Tipsとしてまとめ
Mac OS X用アプリを Swift言語で作る方法
Apple MacBook Airを買ってみた。開発者必須アプリの紹介
Xcodeで iPhoneの開発の為に、Mac OS X用アプリを Swift言語で作る方法
Windowsパソコンで Macる。Skylake Platform in OSX86 Hackintoshの夢、BIOS設定内容
Windows PCで iPhone開発、Mac OS Xで Hackintoshの方法、DVMT Pre-Allocated 128MB
VirtualBoxに Mac OS X macOS Sierraをインストールの夢
Windowsの VirtualBoxに Mac環境を作り OS Xをインストールして動かす夢を見る
Raspberry Pi3で iPhoneの開発言語でお馴染みの Swiftを動かし、GPIOを操作して Lチカする方法
Raspbian Jessieで Swift言語のセットアップ方法、GPIOの LEDを Lチカや I2Cを制御する方法
[HOME]
|
[BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c)
2016 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator
http://www.neko.ne.jp/~freewing/xcode/xcode_swift_2_screen_mascot_2/