javaSEがiOSアプリデザイン、開発に挑む日記

本業java SEがswift、デザインの勉強したことを残しておくブログ

swift storyboardで画面サイズに合わせたviewのconstraints

複数機種で綺麗にレイアウトしたい時、

それぞれの機種に対してstoryboardファイルを作るか、コードの中でガリガリやらなきゃいけないかと思っていたら、やり方があった。

 

  1. 親viewに対してEqual Height(width)を指定
    1. 画面サイズに合わせて伸縮する辺を親viewと一緒に選択状態にしてEqual Height(width)を指定
    2. 指定したconstarintsのmultiplierを指定(3:2、とか比率で)
  2. viewにaspect ratioを設定
    1. 表示したい縦横比をmultiplierに指定

 

これで画面サイズに合わせて大きさが決まるviewができる。

 作ったアプリも直さないとなぁ...

 

 

swift ロケールから自分のタイムゾーンへ時刻変換

端末のロケールからユーザのタイムゾーンに時刻変換するメソッド。

GMTで送られてくるAPIを使用するときとかに。

func changeDateFormatM(dt_txt:String)->String{
    var date_formatter: NSDateFormatter = NSDateFormatter()
    date_formatter.timeZone     = NSTimeZone(name: "GMT")
    date_formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
    let tmpDate:NSDate = date_formatter.dateFromString(dt_txt)!
        
    let localeName = NSLocale.preferredLanguages().first as! String
        
    let myDateFormatter: NSDateFormatter = NSDateFormatter()
    myDateFormatter.dateFormat = "MM/dd"
    myDateFormatter.locale     = NSLocale(localeIdentifier: localeName)
    var localeDate: NSString = myDateFormatter.stringFromDate(tmpDate)
        
    return localeDate as String
}

 

 日本は上手くいってるけど、もしかすると他国はダメかも...

ご参考に。

 

 

swift nilチェック

nilになることがあって落ちるのを防ぐためにif文でチェックする方法。

記述方法をいつも忘れて調べなおしてるのでメモ。

以下はappDelegateに持たせた変数がまだセットしてない(nil)かチェックしてから使用する例

if let nilCheck = appDelegate.isMapSelect {
    var isMapSelect:Bool = appDelegate.isMapSelect!
}

 

 

 

swift 標準マップの表示

純正マップになってから全然使ってないけど

ライセンスとかアクセスが制限されない(と思われる)ので

ちょっと使いたいぐらいなら良いかも

 

import UIKit
import MapKit

class SelectLocationViewController: UIViewController, MKMapViewDelegate {

    
    var lat = 0.0
    var lon = 0.0
    
    @IBOutlet weak var mapV: MKMapView!
    override func viewDidLoad() {
        super.viewDidLoad()

        mapV.delegate = self
        
        // 中心点の緯度経度.
        let myCoordinate: CLLocationCoordinate2D = CLLocationCoordinate2DMake(lat, lon)
        
        // 縮尺.
        let myLatDist : CLLocationDistance = 10000
        let myLonDist : CLLocationDistance = 10000
        
        // Regionを作成.
        let myRegion: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(myCoordinate, myLatDist, myLonDist);
        
        // MapViewに反映.
        mapV.setRegion(myRegion, animated: true)

        
        // Do any additional setup after loading the view.
    }

    // Regionが変更された時に呼び出されるメソッド.
    func mapView(mapView: MKMapView!, regionDidChangeAnimated animated: Bool) {
    }

 

 

 

swift iAd 一番簡単な方法

テスト的に入れてみたiAd

収益でクラスとかではないので一番簡単な方法で実施

 

iAdフレームワークのリンク

  1. プロジェクトの「general」→「Linked Frameworks and Libraries」で「+」クリック
  2. iAdで検索して「iAd Framework」 を追加

 

iAdフレームワークをインポート

import iAd

 

表示を許可するパラメータを設定

self.canDisplayBannerAds = true

 

ただ、細かくレイアウトを組んでると崩れたり...

ちゃんとやるならiAdBannerViewを使ったりするんでしょうね。

 

 

 

swift 天気アプリ

先月までにと、自分的ノルマで作成してきたアプリを申請

f:id:k-murataDevDesign:20150614195058p:plain

 

取得した天気をスクロール形式で表示。

背景はひとつながりの草原で、

天気のよって暗さとかが変わるような仕様。

結局こんな感じで落ち着く。

審査が早く通れば良いなと。

 

にしても、

openWetherMapの天気情報は日本的には合わない感じ...。

openweathermap.org

 

地名も、知らない地名がよく出てきたり。

ナイトウボクジョウとは...

 

 

 

swift 文字列の一部を取得

 javaだとsubsting()で考えるまでもないけど

 swiftだと型の罠にハマったのでメモ。

 

let hh:String = (formatDate as NSString).substringWithRange(NSRange(location: 6,length: 2)) as String

 

substringWithRange()で指定部分を取得できるけど

型がNSStringにキャストしなきゃいけないということで。

 

CGFloatとDoubleの違いとか、

微妙な差に引っかかるのがswiftの嫌なところで。