• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:イメージビューでの表示位置のずれ)

iOS8, xcode 6初心者によるイメージビューでの表示位置のずれ

このQ&Aのポイント
  • storyboard上でのイメージビューの表示位置が横方向にずれてしまう問題についてご教示ください。
  • センセーショナルなタイトル生成を行ってください。
  • iOS8とxcode 6を使用して、イメージビューの長さを測定値に基づいて変化させる方法を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

No.1です。 「何も表示されない(真っ白のまま)」ということになると そもそも、そのx1,y1は黒の背景色かあるいは黒のイメージを 設定しているのか?今回のコードなしで、初期状態から黒いバー を表示するようにした場合、ちゃんと表示されるのか? そして、どんなコードを追加した段階で表示されなくなるのか? ということを確認すべきだと思います。 今回質問されたコードは断片的なものなので、それ以上コメントできません。 もしわからないようなら、質問と関係ない部分をできるだけ省いた上で 問題動作が再現するソースコード全体を補足に貼り付けてもらい、 期待する動作を書いてもらえば、何かアドバイスできるかもしれません。 もしかすると、質問と関係ない部分を省いていく過程で、なにか自分で 気付くかもしれません。

ima_mitsu
質問者

お礼

回答、ありがとうございます。 今回の問題を考えていく中で、様々な情報を得ることができました。 もう一度、基本に返って、勉強していきたいと思います。 伸展ありましたら、ご報告いたしたいと思います。 今後とも、宜しくお願い致します。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

No.1です。 > ただ、私のしたかったのは、ピラミッドグラフ(人口統計にあるような)のように > 縦のセンターラインを 真ん中にして、左右にふれるような(右部分がx変数、左部分がy変数) > イメージでした。 angleとangle_ratioの意味がよくわかっていませんが、 angle_ratioのとり得る値は0~1.0で、 angleが正の時にセンターライン(x=100)より右にx1をangle_ratio*100ピクセル分伸ばし、 angleが負の時にセンターライン(x=100)より左にy1をangle_ratio*100ピクセル分伸ばす ということであれば、 if (angle >= 0) { self.x1.frame = CGRectMake(100, 0, 100*angle_ratio, 10); self.y1.frame = CGRectMake(100, 0, 0, 10); } else { self.x1.frame = CGRectMake(100, 0, 0, 10); self.y1.frame = CGRectMake(100 - 100*angle_ratio, 0, angle_ratio*100, 10); } とすべきじゃないでしょうか? transformを操作する必要はないと思います。

ima_mitsu
質問者

お礼

回答、ありがとうございます。 何度もすみません。 教えて頂いた、 if (angle >= 0) { self.x1.frame = CGRectMake(100, 0, 100*angle_ratio, 10); self.y1.frame = CGRectMake(100, 0, 0, 10); } else { self.x1.frame = CGRectMake(100, 0, 0, 10); self.y1.frame = CGRectMake(100 - 100*angle_ratio, 0, angle_ratio*100, 10); } では、何も表示されない(真っ白のまま)ので (たぶん、私のどこかの設定の間違い) 苦肉の策として、x1という黒バーの入っているイメージビューの 原点(たぶん左上)を求め x1_x=CGRectGetMinX(self.x1.frame); x1_y=CGRectGetMinY(self.x1.frame); 値が代入されているのは、デバッガで確認しました。 この値を下記に代入したのですが、何も表示されません。 case 1: if (angle == 0 ) {self.x1.frame = CGRectMake (x1_x, x1_y, 0, 0); self.y1.frame = CGRectMake (y1_x, y1_y, 0, 0); } else if (angle > 0 ){ → self.x1.frame = CGRectMake (x1_x, x1_y, 100 * angle_ratio, 10); // self.x1.image =[UIImage imageNamed:@"angle_bar.png"]; } // else if (angle < 0){self.y1.frame = CGRectMake (100 -100 * angle_ratio , 0, 100, 10 );} break; →の部分を通っているのは、デバッガで確認しました。 Transformを使った下の部分では、黒バーが表示されています。 case 2: if (angle == 0 ) {self.x2.transform = CGAffineTransformMakeScale(0, 1); self.y2.transform = CGAffineTransformMakeScale(0, 1); } else if (angle > 0 ){self.x2.transform = CGAffineTransformMakeScale(angle_ratio, 1);} else if (angle < 0){self.y2.transform = CGAffineTransformMakeScale(-angle_ratio, 1);} break; 不思議です。 お時間あるときにご助言頂ければ幸いです。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

No.1です。 すみません。念のため訂正です。 > anchorPoint.xを0にするとともにposition.xを0にすれば、 position.xは0ではなく、イメージビューのフレーム開始位置です。 そもそも、ややこしいlayerを操作しなくても イメージビューのフレーム幅を調整するだけでいいのではないか という気もします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

> 横方向に数十ポイント、ずれて描画されてしまいます。 http://d.hatena.ne.jp/shobonengine/20110517/1305618891 が参考になると思いますが、anchorPointというのは、 layer内のどの位置ををpositionに合わせるかという指定です。 positionのデフォルトは、viewの中心位置になっていますから positionを変えずにanchorPoint.xを0にすると、中心から右に 延びるように表示されるはずです。 anchorPoint.xを0にするとともにposition.xを0にすれば、 おそらくあなたが意図している表示になると思います。

ima_mitsu
質問者

お礼

回答、ありがとうございます。 おっしゃるとおり、 self.x1.layer.anchorPoint= CGPointMake(0,0); をやめ self.x1.transform = CGAffineTransformMakeScale(angle_ratio, 1); のみにしたところ、 それぞれのバーの中心点を起点にして、左右に広がるバーになりました。 ただ、私のしたかったのは、ピラミッドグラフ(人口統計にあるような)のように 縦のセンターラインを 真ん中にして、左右にふれるような(右部分がx変数、左部分がy変数) イメージでした。 >そもそも、ややこしいlayerを操作しなくても >イメージビューのフレーム幅を調整するだけでいいのではないか >という気もします。 こういう手もあったかと思い、 case 1: if (angle == 0 ) {self.x1.frame = CGRectMake (0, 0, 0, 0); self.y1.frame = CGRectMake (0, 0, 0, 0); } else if (angle > 0 ){self.x1.frame = CGRectMake (0, 0, 100 * angle_ratio, 10);} else if (angle < 0){self.y1.frame = CGRectMake (100 -100 * angle_ratio , 0, 100, 10 );} break; としてみましたが、希望の表示がされず、座標系か何か違うのかと思い、 バーを引く前に、縦のセンターラインに合わせるべく あらかじめ、左右に寄っている分を調整しようと→のようにしてみましたが、これでも駄目で xcode の手強さに参っております。 case 1: if (angle == 0 ) {self.x1.transform = CGAffineTransformMakeScale(0, 1); self.y1.transform = CGAffineTransformMakeScale(0, 1); } else if (angle > 0 ){self.x1.transform = CGAffineTransformMakeScale(angle_ratio, 1); → self.x1.transform = CGAffineTransformMakeTranslation(-(100 - (100 * angle_ratio))/100, 0);} else if (angle < 0){self.y1.transform = CGAffineTransformMakeScale(-angle_ratio, 1);} break; もし、お時間のあるときにでも、ご教示頂けたら、幸いです。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • View controllerのoutlet

    現在xcodeでswiftのプログラミングを行っています。 現在storyboardで複数のview controller(3つのview controllerを追加)を追加して、そのうちの1つの画面には現在時刻の表示するプログラムをしたいと思っています。 そこで、 リフレッシュのためにSwiftで時計を作った by @fantmsite on @Qiita http://qiita.com/fantm21/items/9b9abd472cfed0b5f883 こちらのサイトを参考にしてやってみようと思い、まず、 @IBOutlet weak var yearLabel: NSTextField! @IBOutlet weak var monthLabel: NSTextField! @IBOutlet weak var daysLabel: NSTextField! @IBOutlet weak var dayOfTheWeekLabel: NSTextField! @IBOutlet weak var hourLabel: NSTextField! @IBOutlet weak var minutesLabel: NSTextField! @IBOutlet weak var secondLabel: NSTextField! これらのOutletの登録を行う為、storyboardのView controllerに配置したlabelをcontrolボタンを押しながら、ViewController.swiftの画面の ”class ViewController: UIViewController {” 行の下側に引っ張ってみたのですが、outletを登録するのかとかの表示が全く出てきません。 いろいろといじってみてわかったことは 一番の最初のViewControllerのlabelやコマンドボタンなどはoutletの登録ができるのですが、2番目以降のViewControllerではこれができないことです。 どなたか解決方法をご教示いただきますよう、宜しくお願い致します。

    • ベストアンサー
    • Swift
  • xcode5 iPhoneアプリ開発の学校(書籍)

    私は、「iPhoneアプリ開発の学校」という書籍を所持しています。 http://www.amazon.co.jp/%E3%82%84%E3%81%95%E3%81%97%E3%81%8F%E3%81%AF%E3%81%98%E3%82%81%E3%82%8BiPhone%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%AE%E5%AD%A6%E6%A0%A1-%E6%A3%AE-%E5%B7%A7%E5%B0%9A/dp/4839941076 この書籍を参考にしていて、自分でやってみて不明な点があります。 xcodeの数の変更についてです。 書籍の内容では、「金魚の数」を「fish」と指定しており、その数が10だった為、 ViewController.hに、 @property(weak,nonatomic)IBOutlet UII,ageView *fish1; から、*fish2、*fish3・・・ @property(weak,nonatomic)IBOutlet UII,ageView *fish10; となっていました。 私はこの一番下の行に、画像をImageViewでOutlet接続したので、 「@property(weak,nonatomic)IBOutlet UII,ageView *fish11;」 と1行だけ追加されました。 ViewController.mには、 fishArray=[NSArray arrayWithObjects: self.fish1,self.fish2,self.fish3,self.fish4,self.fish5,self.fish6,self.fish7,self.fish8,self.fish9,self.fish10,nil]; となっていたものに、「,self.fish11」の文字列のみを追加ました。よって、 「fishArray=[NSArray arrayWithObjects:self.fish1,self.fish2,self.fish3,self.fish4,self.fish5,self.fish6,self.fish7,self.fish8,self.fish9,self.fish10,self.fish11nil];」 となりました。 合計2箇所のみの変更です。 しかし、これでビルドしてみると、「Build Scceeded」とはなるのですが、シュミレーターで起動直後、フリーズしたように固まってしまいます。 そして何故か、エラーは出ません。 また、書籍のページでいうとP.246辺りになります。 この場合、どうすればよいでしょうか? 詳しい方がいましたら、宜しくお願いします。

    • ベストアンサー
    • Mac
  • IBOutlet が認識されない

    Xcode3.2.5 で久しぶりにiPhoneアプリ作成の再勉強をしていますが、 IBOutlet が Interface Builder で認識しません。 手順### 新規プロジェクトで Window-based Application を選択して HelloWorldプロジェクトを作成。 ↓ HelloWorldAppDelegate.h に以下のように記述 #import <UIKit/UIKit.h> @interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; IBOutlet UILabel *label; //←追加 } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UILabel *label; //←追加 @end 保存して、MainWindow.xib をクリックし Interface Builder を起動しましたが、 Hello World App Delegate をみても IBOutlet の label が ちゃんと Inspector に表示されません。 以前、前のバージョンのXcodeで作成したものをみてみると ちゃんと反映されるのですが新バージョンのXcodeだと具合が違うようです。 ググってみると http://iphone-ipodtouch-development.blogspot.com/2010/10/inspector.html が一番この例に詳しいようですがうまくいきません。 この解決法の説明をよろしくお願い致します。

  • Objective-Cのエラーコードの意味

    タイトルの通りです。 エラー部分は最下部にあります。 ------------------------------------------------------------------------------------------------- // // ViewController.m // Kadai // // Created by on 2014/08/10. // Copyright (c) 2014年 saikoro. All rights reserved. // #import "ViewController.h" @interface ViewController () <UIAlertViewDelegate> @property (weak, nonatomic) IBOutlet UITextField *tfMyouji; @property (weak, nonatomic) IBOutlet UITextField *tfName; @property (weak, nonatomic) IBOutlet UILabel *Aisatsu; @end @implementation ViewController // 画面タッチ時 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // キーボード非表示 [self.tfMyouji resignFirstResponder]; [self.tfName resignFirstResponder]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } // [挨拶する]ボタン押下 - (IBAction)introduce:(id)sender { UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"確認" message:@"挨拶しますか?" delegate:self cancelButtonTitle:@"キャンセル" otherButtonTitles:@"はい", nil]; // 表示 [av show]; } // AlertViewボタン押下 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"再確認" message:@"本当に挨拶しますか?" delegate:nil cancelButtonTitle:@"やっぱりやめときます" otherButtonTitles:@"早く!", nil]; [av show]; } // AlertViewボタンさらに押下 + (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ // 入力された名前の保持 NSString *str = self.tfMyouji.text; ←ここでエラーが出ます。なぜか「tfMyouji」が                    予測で出てきません } @end ------------------------------------------------------------------------------------------------- どなたかエラーの理由をご教授頂けないでしょうか。 以上、何卒宜しくお願い致します。

  • Xcode4のエラー(IPhoneアプリ)

    はじめまして。 IPhoneのアプリ作成に挑戦しています。 Xcode4のバージョンは 4.5.1です。 【はじめてのXcode4プログラミング】という参考書でIPhoneのカメラアプリを作る章があり、写真ライブラリから選択した画像を表示できるとのことです。 しかし、XcodeでRun(実行)すると、ViewController.mの最後2行【UIImage *originalImage =[info objectForkey:UIImagePickerControllerOriginalImage];】が赤くなり、【’dismissModalViewControllerAnimated’is deprecated: first deprecated in iOS 6.0】というエラー表示がでます。 全体のコードは下記の通りです。 ネットで調べてみましたが、解決方法がわかりません。 先に進めず困っています。 どうか解決方法を教えてください。 よろしくお願い致します。 ●ViewController.h// // ViewController.h // CameraApp // #import @interface ViewController : UIViewController - (IBAction)pressCameraButton:(id)sender; @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end ●ViewController.m // // ViewController.m // CameraApp // #import “ViewController.h” @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)pressCameraButton:(id)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentModalViewController:picker animated:YES]; } - (void)imagePickerController:(UIImagePickerController*)Picker didFinishPickingMediaWithInfo:(NSDictionary*)info { [self dismissModalViewControllerAnimated:YES]; UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage]; self.imageView.image = originalImage; } @end

  • Xcode TableView~詳細へ遷移について

    初めまして。 現在Xcodeにてアプリ開発中の初心者です。 現在、Tableviewのリストをタップしたら詳細なページへ遷移する、というものを作っております。 以下のサイトを参考にし、作成致しました。 http://www.raywenderlich.com/ja/34037/table-view%E3%81%ABsearch%E6%A9%9F%E8%83%BD%E3%82%92%E5%8A%A0%E3%81%88%E3%81%BE%E3%81%97%E3%82%87%E3%81%86 上記サイトで遷移するところまでは出来ましたものの、 詳細な情報をどう記載していいのかよくわからず、色々サイトなどを見てやってみたのですが実現出来ておりません。 こちらのyoutube動画を見ながら https://www.youtube.com/watch?v=lMVNoDEkrxk DetailViewController.hとDetailViewController.mを以下のように追加してみたのですが 駄目でした。 <DetailViewController.h> #import <UIKit/UIKit.h> @interface DetailViewController : UIViewController { IBOutlet UILabel *Built; IBOutlet UILabel *Height; IBOutlet UILabel *Type; IBOutlet UILabel *Visitation; } @property (strong, nonatomic) IBOutlet UILabel *candyArray; @property (strong, nonatomic) IBOutlet UILabel *filteredCandyArray; @property (strong, nonatomic) IBOutlet UIImageView *candySearchBar; @property (strong, nonatomic) NSArray *DetailModal; @end <DetailViewController.m> #import "DetailViewController.h" @interface DetailViewController () @end @implementation DetailViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. _candyArray.text = _DetailModal[0]; _filteredCandyArray.text = _DetailModal[1]; _candySearchBar.image = [UIImage imageNamed:_DetailModal[2]]; self.navigationItem.title = _DetailModal[0]; if ([_candyArray.text isEqualToString:@"chocolate bar"]) { Built.text = @"test1"; Height.text = @"test2"; Type.text = @"test3"; Visitation.text = @"test4"; } } @end どなたかご存知の方、お詳しい方教えて頂けませんでしょうか。 質問に慣れておらず、また知識が浅く質問方法や情報など不足しておりませんでしたら ご指摘頂けますと幸いです。

  • iPhoneアプリ作成時のXcodeのエラー

    はじめまして。 iPhoneのアプリ作成に挑戦しています。 Xcode4のバージョンは 4.5.1です。 【はじめてのXcode4プログラミング】という参考書でIPhoneのカメラアプリを作る章があり、写真ライブラリから選択した画像を表示できるとのことです。 しかし、XcodeでRun(実行)すると、ViewController.mの最後から4行目【UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage];】が赤くなり、【No visible @interface for 'NSDictionary' declares the selector 'objectForkey'】というエラー表示がでます。 全体のコードは下記の通りです。 ネットで調べてみましたが、解決方法がわかりません。 先に進めず困っています。 どうか解決方法を教えてください。 よろしくお願い致します。 ●ViewController.h// // ViewController.h // CameraApp // #import @interface ViewController : UIViewController - (IBAction)pressCameraButton:(id)sender; @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end ●ViewController.m // // ViewController.m // CameraApp // #import “ViewController.h” @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)pressCameraButton:(id)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [[self presentViewController:picker animated:YES completion:nil];} - (void)imagePickerController:(UIImagePickerController*)Picker didFinishPickingMediaWithInfo:(NSDictionary*)info { [self dismissViewControllerAnimated:YES completion:nil]; UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage]; // ↑↑ 上記の行でエラーが出ます self.imageView.image = originalImage; } @end

  • 【iOS】pickerViewを隠すには?

    pickerViewを、画面のどこかをタップすることで隠すには どのようにすればよろしいでしょうか。 現在のコードです。 TextFieldの代わりにピッカーを出すという実装です。 ヘッダー @property(nonatomic,weak)IBOutlet UITextField *textField; @property(nonatomic,strong)UIPickerView *pickerView; @property(nonatomic,strong)NSArray *items; メイン - (void)viewDidLoad { self.items = @[@"A",@"B",@"C",@"D"]; self.pickerView = [[UIPickerView alloc]init]; self.pickerView.dataSource = self; self.pickerView.delegate = self; self.pickerView.showsSelectionIndicator = YES; self.textField.inputView = self.pickerView; [super viewDidLoad]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 1; } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ return [self.items count]; } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ return [self.items objectAtIndex:row]; } - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ self.textField.text = [self.items objectAtIndex:row]; } - (IBAction)pressHide:(id)sender{ [self.textField resignFirstResponder]; }

  • xcodeで文字の点滅をしたいのですが

    xcode初心者です。 iphoneアプリ作成中でトップページの表紙にActionButtonを設置して「push start」と文字をいれました。 この文字を点滅させたいのです。 文字の点滅をネットで調べると点滅する為のメソッドがあるのですが、そのメソッドをどう使うのかがわかりません。そのメソッド↓ - (void)blinkImage:(UIImageView *)target { CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"opacity"]; animation.duration = 0.1f; animation.autoreverses = YES; //animation.repeatCount = animation.repeatCount = 3; //infinite loop -> HUGE_VAL animation.fromValue = [NSNumber numberWithFloat:1.0f]; //MAX opacity animation.toValue = [NSNumber numberWithFloat:0.0f]; //MIN opacity [target.layer addAnimation:animation forKey:@"blink"]; } ActionButtonを -(IBAction)pushStartAction:(id)sender;としました。 これだと文字が弄れないと思いまして、Labelも作成しました。 @property(weak,nonatomic)IBOutlet UIButton *pushStartLabel; Buttonが表示される直後に点滅が始まるようにしたいので viewDidLoadに書くのかなと思いましたが、ここでどう書いたらいいのか わからなくなりました。 Buttonが表示される時に上記のメソッドを呼べばいいかと思うのですが、 分かる方ご教授頂ければと思います。 宜しくお願いします。

  • swiftでストップウォッチに計算機能を追加

    swiftでストップウォッチアプリを作りました。 そのアプリに以下の機能を追加しようと思います。 一つの作業が完了するまでの時間(秒)を計測した上で、 その時間をもとに1時間あたりではいくつの作業が完了するのか、 計算して画面に表示させる機能。 (計算式:3600 / 計測した秒数 = 1時間あたりの作業数) どのように書けば、上記のような機能を追加できるでしょうか? 現状のソースコードは以下のようになります。 import UIKit class ViewController: UIViewController { @IBOutlet weak var timerLabel: UILabel! @IBOutlet weak var startButton: UIButton! @IBOutlet weak var stopButton: UIButton! @IBOutlet weak var resetButton: UIButton! @IBOutlet weak var page: UILabel! var startTime: NSTimeInterval? = nil var timer: NSTimer? var elapsedTime: Double = 0.0 override func viewDidLoad() { super.viewDidLoad() setButtonEnabled(true, stop: false, reset: false) // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func setButtonEnabled(start:Bool, stop:Bool, reset:Bool) { self.startButton.enabled = start self.stopButton.enabled = stop self.resetButton.enabled = reset } func update() { if let t = self.startTime { let time: Double = NSDate.timeIntervalSinceReferenceDate() - t + self.elapsedTime let sec: Int = Int(time) let msec: Int = Int((time - Double(sec)) * 100.0) self.timerLabel.text = NSString(format: "%02d:%02d:%02d", sec/60, sec%60, msec) as String } } @IBAction func startTimer(sender: AnyObject) { setButtonEnabled(false, stop: true, reset: false) self.startTime = NSDate.timeIntervalSinceReferenceDate() // 2001/1/1 0:0:0 self.timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true) } @IBAction func stopTimer(sender: AnyObject) { setButtonEnabled(true, stop: false, reset: true) if let t = self.startTime { self.elapsedTime += NSDate.timeIntervalSinceReferenceDate() - t self.timer?.invalidate() self.timer = nil } } @IBAction func resetTimer(sender: AnyObject) { setButtonEnabled(true, stop: false, reset: false) self.elapsedTime = 0.0 self.startTime = nil self.timerLabel.text = "00:00:00" } }

    • ベストアンサー
    • Swift