気になる

アフェリエイト旅行

自動車

家庭菜園

« 明かりが眩しい症状に、漢方は効くのか? 抑肝散(ヨクカンサン) | トップページ | iphone画面上に、ツールチップとか出せるんだぁ »

2013/09/22

pinch(ピンチ)で、拡大縮小 2本指!

おぉぉぉぉ!出来た。w
iphoneシュミレーター上で、2本指を実現するには
Alt + クリック
問題】他のジェスチャーとかぶる(T_T)
----------------------------------------------------------------------------------
複数のジェスチャー登録で操作が、ユーチューブの動画にUpされてました♪
概要:メインの画面上に、サブ画面を乗せて、そのサブ画面viewをピンチで拡大縮小させますよー。(メイン.hで、1つストリートボードを生成して
その画面表示内容にはIdentifierでサブ画面を設定して
addSubViewでメイン画面上に表示させますよー。)
  1. サブ画面(子側)に
    デリゲート「UIGestureRecognizerDelegate」を使いますよー。
  2. なので、子をまず作りましょう。
  3. ストーリーボード画面を表示させた状態で、画面右下の
    部品リストの中から、子画面用に1つViewControllerを選択してストリーボード上にドロップ。
  4. 新規ファイル追加してそのクラス名を、子画面に設定。
    これで結びつきが出来ました。
  5. GUI画面で、登録したいジェスチャー部品もストーリーボード上にぽんぽんとドラッグして乗せましょう。(今回は、Tap、Pinch、Roteition)
  6. 画面の左から2番めの、各々Scene内にさっき登録したジェスチャーがあるので、それを1つずつwin+マウスで掴んでViewControllerにドロップすると、黒いポップ画面が出るので、その中からDelegateを選択していく。(計3回)
  7. .h ファイルの @interface subViewController : UIViewController の後ろにデリゲート使うことを書いて下さい〜。
    @interface subViewController : UIViewController<UIGestureRecognizerDelegate>
その機能は・・? その文字の上を
Ctrl+クリック。すると、デリゲートで使えるオプションが見られますよー。

@optional

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

オプションを利用する為にコピーして、自分の.hファイルに貼り付けましょー。
そして、中身は自分で書きましょー。(^_^;) byアップル

コードはこんな感じで今回は書いてますよー。
アップルでいうところの、振り分けて使ってね。部分でしょうか。

.mファイル

1番目:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{

    if([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]){

        [gestureRecognizer addTarget:self action:@selector(panGestureAction:)];

    } else if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]] ) {

  [gestureRecognizer addTarget:self action:@selector(pinchGestureAction:)];

 } else if ([gestureRecognizer isKindOfClass:[UIRotationGestureRecognizer class]]) {

  [gestureRecognizer addTarget:self action:@selector(rotateGestureAction:)];

 } else if([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){

        [gestureRecognizer addTarget:self action:@selector(tappedGestureAction:)];

    }

 return YES;

 

}

2番目: 無条件に、すべてのジェスチャを同時に認識します。
(デフォルトでは同時に複数のジェスチャを認識してくないので、UIGestureRecognizerDelegategestureRecognizerをオーバーライドすることにより、複数のジェスチャーを同時に認識させられるようになる)

- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

 return YES;

}

 

#pragma mark - Gesture Actions
各々ジェスチャーのアクションを書きましょう。

- (void)rotateGestureAction:(UIRotationGestureRecognizer *)rotate {}

- (void)pinchGestureAction:(UIPinchGestureRecognizer *)pinch {}

-(void)panGestureAction:(UIPanGestureRecognizer *)pan {}

-(void)tappedGestureAction:(UITapGestureRecognizer *)tap{}

.h ファイル

さっきのジェスチャーアクションの各々書いたコードの中で使った変数を宣言しておきましょう。

<UIGestureRecognizerDelegate>

{

    CGPoint prevPanPoint;

    float prevPinchScale;

    float prevRotation;

}

。。。確認しながらじゃないと不安になるので、ここらで一度表示させてみる。

メイン画面(親側)ファイルに、子を表示させるコードを書く。

.hファイルを開いて

#import <UIKit/UIKit.h>
#import "subViewController.h"
@interface viewController : UIViewController

{

 subViewController *svc;

}

@property(strong,nonatomic)subViewController *svc;

@end

.mファイルを開いて

 

- (void)viewDidLoadの中に

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

 self.svc = [storyboard instantiateViewControllerWithIdentifier:@"subView"];

 

    [self.view addSubview:self.svc.view];

で、各々の名前を付けたので、
ストーリーボード画面上で設定する。

ストーリーボードを開いて、左から2番めのSceneの中から、まずは子画面のsubViewController(黄色の丸ついている奴)を選択した状態で、画面右端のIdentifier欄内の、storyboardIDに「subView」を設定。

子画面がわかりやすいように、背景を緑にしてsizeをfreeformにして、
画面自体のサイズを小さくするのにScene中からviewを選択した状態で縦横サイズ設定のところで100ずつ設定しておいた。

同様に、親画面のViewController(黄色の丸ついている奴)を選択した状態で、画面右端のIdentifier欄内の、storyboardIDに「MainStoryboard」を設定。

おぉ!親画面の中に子画面が表示された♪(*^_^*) 感動。

で、中のアクションを各々書いていく。
デリゲートなので、子は「何かイベントありましたヨ」ということだけを誰かに丸投げすればいいだけなので、・・

あれ?違うらしい。(・∀・) 子に仕事内容を書くんだ。

子の.mファイルに
アクションを各々書いてって

子の.hファイルに
アクション内で使った変数を宣言する。

iOS 5 Gestures : How to use UIGestureRecognizers for Tap, Pinch, and Rotateにコードが書かれてます、本家を見てねー。

拡大・縮小動いた!!!\(^o^)/
 感動、感謝カンゲキ!

※へーへーへーと思ったこと。
pinchで、指が2本ともがちゃんと目的のviewの上に乗っていないと、1本だと認識されるんですね。そりゃそうか。(・o・)

※tappedGestureAction・・w

感謝の気持をコメント欄に書いたけど、なんかエラーが。^_^;
ということで、ここに気持ちを書き残しておきます。m(__)m

*************************************

ありがとうございました。m(__)m

動画もユーチューブに乗せてくれていたので、とっても理解出来ました。

コードもダウンロード出来て中が見られて、本当に勉強になりました。

今後、ますますのご活躍楽しみにしております。\(^o^)/

*************************************

英語で書けよ。w
ツッコミは無しでお願いします。

----------------------------------------------------------------------------------

ストリートボードで作成する方法はコチラ↓

----------------------------------------------------------------------------------
後は・・どのviewに適用させるかを書いておく。
例:ラベルを利用して、
ラベルに、パンとかピンチを適用させたいので下記のように記述
(書くの忘れてたら、画面全部が拡大縮小(回転)とかしてびびったw)

- (void)viewDidLoad
{
    [super viewDidLoad];

 

//ラベルを生成

    UILabel *label = [[UILabel alloc]init];

//ラベルを表示

 

        [self.view addSubview:label];

// ホールド出来るように設定(標準はホールド出来ないNOになっている)

        label.userInteractionEnabled = YES;

// ホールドした際の挙動

 UIPanGestureRecognizer* panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(doPan:)];

        [label addGestureRecognizer:panGesture];

        UIPinchGestureRecognizer* pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(doPinch:)];

        [label addGestureRecognizer:pinchGesture];

« 明かりが眩しい症状に、漢方は効くのか? 抑肝散(ヨクカンサン) | トップページ | iphone画面上に、ツールチップとか出せるんだぁ »

MacMini」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: pinch(ピンチ)で、拡大縮小 2本指!:

« 明かりが眩しい症状に、漢方は効くのか? 抑肝散(ヨクカンサン) | トップページ | iphone画面上に、ツールチップとか出せるんだぁ »

google検索

  • Google


    このブログを検索
    ウェブ全体から検索

カテゴリー

ニュース

  • 日経平均(長期)

    株価ミニチャートのブログパーツ
  • 経済指標(発表と内容)へのリンク
    http://jp.investing.com/economic-calendar/
  • 経済指標
  • . . .
  • 日経平均チャート
    by 株価チャート「ストチャ」
  • 株指標
2019年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31