AVPlayerViewController の controlStyle

投稿者: Anonymous これまで動画再生には MPMoviePlayerController を使用していたのですが、iOS 9.0 からdeprecated となったので AVPlayerViewController に乗り換えようと思っているのですが、MPMoviePlayerControllerで、 moviePlayerController.controlStyle = MPMovieControlStyleFullscreen; とした時に画面左上に表示されていた再生を終了する[Done]ボタンをAVPlayerViewControllerで表示させる方法がわかりません。 avPlayerViewController.showsPlaybackControls = YES; としても再生コントロールは表示するのですが、再生を終了するボタンがありません。 AVPlayerViewController を使って再生画面を表示する時に[Done]ボタンもしくは再生終了させるボタンを表示させる方法を教えてください。 解決 presentViewControllerメソッドで、AVPlayerViewControllerをモーダル表示すれば、「Done」ボタンが表示されます。(iOS 9.1のシミュレータで確認しました) モーダル表示ではなく、UINavigationController内で表示しているという場合には、アプリ側で「Done」ボタンを作る必要があると思います。 回答者: Anonymous

OpenCVを使って、傾いてしまった写真を正確な位置に戻したい

投稿者: Anonymous iPhoneのカメラを使って写真を撮った時に、斜めに傾いてしまった写真を正確な位置に戻したいです。 iPhoneの連写アプリなどをつかって何枚か写真を撮った時、写真1のようにまっすぐ撮れた写真と写真2のように少し傾いてしまった写真があったとします。傾いてしまった写真2をまっすぐにするために、写真1を基準にし何かしらのアルゴリズム(★1)を使って、写真2を補正したいと考えています。OpenCVにおいて、この問題を解決できるアルゴリズムは存在するでしょうか? 解決 こちらの記事が参考になるのではないでしょうか。 Opencvを使ってパノラマ写真を作る この記事のソースコードでは、以下の様な変換を行っています。 2枚の写真のSIFT特徴量を抽出し、 特徴量のマッチングを行い 画像間のホモグラフィ行列を求め 写真2を写真1平面に透視変換した画像(写真3とする)を作成 写真3に写真1を貼り付ける 上記のステップうち、5.のステップを端折れば良いかと。 記事に掲載されているソースコードの最後の部分を以下のように改変します。 Mat homo = cv::findHomography(points1, points2, CV_RANSAC); cv::warpPerspective(src[0], result, homo, Size(src[0].cols, src[0].rows)); imshow(“result img”, result); waitKey(0); このresultが求めるべき写真2(完成)になると思われます。 回答者: Anonymous

非同期通信の終了タイミングで処理を呼びだしたい

投稿者: Anonymous AFNetWorking を使用した非同期通信を実装しています。 下記のようなコードで非同期通信にデータを取得することはできました。 しかし通信の終了タイミングで特定の処理を実行する方法がわかりません。 @property NSInteger *pageIndex; @property NSArray *responseData; – (void)viewDidLoad{ self.pageIndex = 1; while (true) { [self getJSON]; NSLog(@”%@”, self.responseData); } } – (void) getJSON{ AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; [manager GET:@”http://togech.jp/api/getPosts” parameters:@{@”page”: [NSString stringWithFormat:@”%d”, self.pageIndex]} success:^(AFHTTPRequestOperation *operation, id responseObject) { self.responseData = responseObject; } failure:nil]; self.pageIndex++;…(Continue Reading)

KVO更新通知の軽減方法

投稿者: Anonymous KVOの更新通知をどのように出せばいいのか悩んでいます @interface aClass : NSManagedObject @property (nonatomic, retain) NSNumber *attr0; @property (nonatomic, retain) NSNumber *attr1; @property (nonatomic, retain) NSNumber *attr2; @property (nonatomic, retain) NSNumber *attr3; @property (readonly) NSNumber *calculatedAttr; @end @implementation aClass @dynamic attr0, attr1, attr2, attr3; + (NSSet *)keyPathsForValuesAffectingCalclatedAttr { return [NSSet setWithObjects:@”attr0″,@”attr1″, @”attr2″, @”attr3″, nil]; } – (NSNumber *)calculatedAttr { return…(Continue Reading)

iOS)AudioUnitを用いてマイク入力にLPFをかける方法について

投稿者: Anonymous AudioUnitを用いてマイク入力信号を色々編集するプログラムを書こうとしたのですが、一向に上手く行かないので質問させていただきます。 やりたいこと  マイク入力信号→LPF→コールバック関数( AUNode は二つになるのでしょうか?) 確認済なこと  マイク入力信号→コールバック関数( AUNode は変数名 inNode 1つです) 環境  iOS 7.1.1 バグ  以下のソースの直後のAuGraphStart(mAuGraph)でプログラムが落ちる。  エラーすら出ないときと、OSStatusのエラーコード10863が得られるときがある。 質問内容  上記バグを修正するにはどのように変更したら良いのでしょうか ソース OSStatus status; NewAUGraph(&mAuGraph); AUGraphOpen(mAuGraph); AUNode inNode; //AudioUnit inUnit; AudioComponentDescription acd; acd.componentType = kAudioUnitType_Output; acd.componentSubType = kAudioUnitSubType_RemoteIO; acd.componentManufacturer = kAudioUnitManufacturer_Apple; acd.componentFlags = testAcd.componentFlagsMask = 0; AUGraphAddNode(mAuGraph, &acd, &inNode); AUGraphNodeInfo(mAuGraph, inNode, NULL, &_inUnit); //LPF設定 AUNode…(Continue Reading)

UIActivityViewControllerでFacebookにシェアできない

投稿者: Anonymous 以前まで正常に動作していましたが、 突然Facebookへのシェアができなくなりました。 ActionSheetが表示され、Facebookのアイコンをタップすると テキストが空の状態になってしまいます。 以下のログが出ているようなのですが、 対策をご存知の方いらっしゃいますでしょうか? plugin com.apple.share.Facebook.post invalidated – (IBAction)Share{ NSString *shareText = [NSString stringWithFormat:@”%@”,_contents_decscription]; NSArray *postItem = @[shareText]; UIActivityViewController *ShareActivity = [[UIActivityViewController alloc] initWithActivityItems:postItem applicationActivities:nil]; [self presentViewController:ShareActivity animated:YES completion:nil]; } 解決 この現象は私も確認しています。 私が確認している現象は、 ・テキストのみを埋め込んだ場合、UIActivityViewControllerにFacebookのアイコンが出ない。 ・テキスト+イメージを埋め込んだ場合、UIActivityViewControllerにFacebookのアイコンは出るが、投稿画面はイメージのみ表示されて、テキストが表示されない。(ユーザが入力したテキストはイメージとともに投稿できる) 本家StackOverflowの以下の質問が参考になると思います。 https://stackoverflow.com/questions/29985024/uiactivityviewcontroller-share-only-text iOS8.3を使っていて、Facebookアプリのv29.0以上を使っていると発生するようです。 驚いたことにFacebookアプリを削除すると、正しく動作するようになります。 (FacebookのアカウントはOSの設定で管理されているため、Facebookアプリを削除してもUIActivityViewControllerにFacebookのアイコンが現れ、投稿画面から投稿できます) 5/7にv30.0がリリースされましたが、それでも治っていませんでした。 次のバージョンで修正するとfacebookアプリ開発者から投稿がありました。 https://developers.facebook.com/bugs/949486035103197/ 回答者: Anonymous

Lost connection to iPhoneでアプリが落ちてしまいます。

投稿者: Anonymous アプリを実機で動作させると落ちてしまうときがあります。 その際、デバッグエリアに Received memory warning と複数回表示された後、以下の画像が出てきてアプリが落ちます。 ちょっと前まではこの現象は起こらず、最近になって急に出てきました。この際コードはいじっておらず、Storyboardのみいじりました。 iOSシュミレータで実行させた場合は Received memory warning も表示されず、アプリも落ちません。 アプリを素早く動作させた時にも同様に落ちてしまうので、メモリを使いすぎてしまっているためのような気もするのですが、以前には出ていなかったので困惑しています。 どなたか何か知っている方がいましたらよろしくお願いします。 解決 メモリ不足によりアプリがクラッシュしているだけかなと思われます。 一度XcodeのProfile機能を使って、実機で実行した際にどの程度メモリがアロケートされているのか計測してみてはいかがでしょうか。 なお、端末によって積んでいるメモリ量は違いますので、実機でのみメモリ警告が出ることは当然あります。 回答者: Anonymous

UICollectionViewのセルが表示されない。

投稿者: Anonymous UICollectionViewをソースコードのみ(Storyboard,Xibは使用しない)で実装していますが、セルが表示されません。 ※UICollectionView自体は表示されていますが、「UICollectionViewDelegate」「UICollectionViewDataSource」が呼び出されてないようです。 UICollectionViewとセルのそれぞれに背景色を設定しましたが、UICollectionViewのみ反映されています。 また、各ソースコードにログ出力処理を追加しましたが、delegate,DataSourceは呼び出されていないようです。 ヘッダーファイル(.h) #import <UIKit/UIKit.h> @interface ViewController : UIViewController @end 実装ファイル(.m) #import “ViewController.h” @interface ViewController ()<UICollectionViewDelegate, UICollectionViewDataSource> { UICollectionView *coll; } @end @implementation ViewController – (void)viewDidLoad { [super viewDidLoad]; NSLog(@”===viewDidLoad===”); coll.delegate = self; coll.dataSource = self; UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc] init]; flowLayout.itemSize = CGSizeMake(100, 100); [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; coll = [[UICollectionView…(Continue Reading)

iBeaconから取得できるRSSIで端末の位置を計算する方法

投稿者: Anonymous iOSアプリ開発で、iBeaconから取得できるRSSI(電波強度)を使って端末の位置(距離)を特定する計算方法が知りたいです。 *A,B,CがiBeacon位置 – (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { if (beacons.count > 0) { for (CLBeacon *beacon in beacons) { NSInteger rssi = bracon.rssi; // 距離計算 } } else { NSLog(@”周囲にbeacon端末はありません。”); } } 解決 理論的にはRSSIはデシベル単位の受信電力ですので、AとBの受信電力の比は10 ^ ((RSSI(b) – RSSI(a)) / 10)で求められます。そして受信電力は(一番単純なモデルでは)距離の二乗に反比例するので、先ほどの式の逆数の平方根をとれば距離の比が求められます。距離の比が判明すれば軌跡はアポロニウスの円になりますので、円と円の交点が推算位置になります。 …理屈の上では上記のとおりですが実際の伝播を計算で再現するのは難しいです。精度を求めるのであればビーコンを設置してからRSSIの値をマッピングしたほうがよいです。 回答者: Anonymous

UIPickerViewでの中央選択部の拡大表示について(iOS8)

投稿者: Anonymous iOS8でUIPickerViewを使用しているのですが、項目のtitleが長すぎて、最後が「…」と省略されてしまうので、フォントサイズを調整して対応しようとしました。 pickerView:titleForRow:forComponent: メソッドでは、フォントサイズの調整項目がないので、 pickerView:viewForRow:forComponent:reusingView: メソッドで、UILabelにattributedStringを指定したものを戻り値にして、フォントサイズの調整を行いました。 その目的は上手く果たせたのですが、pickerView:titleForRow:forComponent: メソッドでは、pikerViewの中央選択部位が、非選択部位に対して拡大表示されているのに対し、pickerView:viewForRow:forComponent:reusingView: メソッドでは、その拡大表示効果がなくなっていることに気がつきました(添付図をご参照ください)。 選択項目全体が表示されることが第一優先ではあるのですが、選択部位が拡大表示される効果は、選択時に分かりやすい効果があると思っています。もし、可能であれば、この2つを両立させたいと思っているのですが、UIPickerViewを用いて、これを実現するのは可能でしょうか? もし、可能であるなら、その手法、あるいは例を示唆いただけないでしょうか?  現在、Swiftを使っていますが、Objective-Cでも構いません。よろしくお願いいたします。 ちなみに pickerView:attributedTitleForRow:forComponent: メソッドは、referenceにもdeprecatedとの記載はないのですが、iOS7以降では、上手く稼働しないとの報告もあり、実際試してみましたが、pickerView:titleForRow:forComponent: メソッドとの違いが確認できませんでした(フォントサイズの調整ができませんでした)。 解決 現状のapiだけでは難しそうです。例えできたとしても、かなり無理のある作りにならざるを得ません。 下記のようにdelegateの中でフォントを変更することはできますが(選択部分は拡大と言うよりは単にフォントが大きくなっているように見える)、選択後の動作なので元々の動きとは異なります。また、selectRow:inComponent:animated:で選択した場合にはこのメソッドが呼ばれないため、初回表示時などにも別途対策が必要です。 – (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { _selectedLabel.font = [UIFont systemFontOfSize:15]; UILabel *label = (UILabel*)[pickerView viewForRow:row forComponent:component]; label.font = [UIFont systemFontOfSize:20]; _selectedLabel = label; // フォントサイズを戻すために保持 } 回答者: Anonymous

値に変化が起きたときの値を、コンソールにログを出力するには?

投稿者: Anonymous 現在、Buttonを押すと値を表示しています。 表示をButtonを押さずとも更新して表示し、その値をコンソールにログを出力するにはどうすればいいでしょうか? #import “ViewController.h” @interface ViewController () //アンテナバー @property (weak, nonatomic) IBOutlet UILabel *labelAntennaBar; //RSSI @property (weak, nonatomic) IBOutlet UILabel *labelRssi; @end @implementation ViewController – (void)viewDidLoad { [super viewDidLoad]; } – (IBAction)buttonGetValue:(id)sender { self.labelAntennaBar.text = [NSString stringWithFormat:@”%zd”, [self antennaBar]]; self.labelRssi.text = [NSString stringWithFormat:@”%zd”, [self radioRssi]]; } #pragma mark – Status bar – (NSInteger…(Continue Reading)

objective-c の performSelector を使用したランダムなメソッドの呼び出しについて

投稿者: Anonymous performSelectorに、NSArrayで生成したランダムなメソッド(文字列)を代入し、そのメソッドに飛ばすにはどうすればよいでしょうか?下記のソースだとクラッシュします。 – (void)trigger:(id)sender{ NSArray *tone_array = [NSArray arrayWithObjects:@”method_1″,@”method_2″,@”method_3″,@”method_4″,nil]; uint32_t rnd = (int)arc4random_uniform((int)[tone_array count]); NSString *rndMethod = [tone_array objectAtIndex:rnd]; [self performSelector:@selector(rndMethod:) withObject:nil afterDelay:0];} – (void)method_1:(id)sender{ //処理するアクション } 解決 perfomSelectorの前にNSSelectorFromString(メソッド名文字列)を実行して、SEL型の変数に戻り値を代入して使います。 以下は、ボタンを押すと画面上のcalledMethodNameFieldと言う名前でIBOutletを繋いだlabelに呼ばれた文字列と同じ名前のメソッドを呼び出して、ラベルにメソッドの名前を表示してみせるサンプルです。 SEL currentSelector = NSSelectorFromString(currentMethodName); [self performSelector:currentSelector withObject:nil afterDelay:0.0]; 上の2行がキモになります。 – (IBAction)testButtonPressed:(NSButton *)sender { NSArray<NSString *> *selectorNames = @[@”method1:”, @”method2:”, @”method2:”, @”method3:”, @”method4:”]; NSUInteger rnd…(Continue Reading)

iOS9.1でiPadキーボードタイプの指定ができない問題について

投稿者: Anonymous iPadアプリを開発しております。 テキストフィールドのKeyboardTypeにUIKeyboardTypeASCIICapableでASCIIキーボードを指定しているのですが、iOS9.1のみ以下の画像のように、指定のキーボードタイプとは別のタイプのものが表示されてしまいます。 確認した限りでは、iPad Retina, iPad2, iPad Airで発生しておりました。 左下の地球のマークでキーボードを切り替えようとすると、以下のような「Alternate Keyboard」というダイアログが表示され切り替えが可能になります。 iOS9の場合にも、指定したキーボードタイプを表示するには、どのように指定すればよろしいでしょうか? 現状は、StoryboardとViewController両方で指定をしておりますが、それでも指定のキーボードが表示されないという状況です。 ご教示いただけたらとおもいます。よろしくお願いいたします。 解決 スクリーンショットはシミュレーターだと思いますが、「日本語かな」キーボードが現在のキーボードになっています。 おそらくは、これが「日本語ローマ字」キーボード、あるいは「English (US)」キーボードに自動的に切り替わることを期待しているのかと思いますが、そういう動作はしません。 iOSでは(9.1に限らず)ユーザーが「設定」で追加してある複数のキーボードを切り替えられるようになっていますが、keyboardTypeはキーボードそのものを切り替えるのではなく、現在選ばれているキーボードの動作モードを指定するものです。 キーボードそのものを切り替える方法は、ユーザーが地球儀のキーを押す以外にはないと思います。 「日本語かな」キーボードでUIKeyboardTypeASCIICapableを指定した場合は、「ABC」のモードが選択された状態になります。(スクリーンショットもそうなっているので正しく動いていると思います) その他のキーボードでも、個々のキーボードに応じた適切な動作になります。 iOS 9.1だけがこうなるというのは、iOS 8などの他の試した環境では、現在選ばれているキーボードが「日本語かな」ではなかっただけではないでしょうか。 回答者: Anonymous

CGRectApplyAffineTransformを適用されたCGRectを元に戻したい

投稿者: user5443 CGAffineTransform の影響で変更された CGRect の値を元に戻すにはどうすればいいでしょうか? 以下が検証として取り組んでいる変換例で、point(10,10), size(100, 100) の四角形を 45 度傾けています。 // 初期状態 CGRect rect = CGRectMake(10, 10, 100, 100); // {{10, 10}, {100, 100}} CGAffineTransform transform = CGAffineTransformIdentity; // [1, 0, 0, 1, 0, 0] // 45度回転させる CGAffineTransform rotate = CGAffineTransformMakeRotation(45.0f * M_PI / 180.0f); // [0.70710677, 0.70710677, -0.70710677, 0.70710677, 0, 0] transform…(Continue Reading)

iOSで本番環境のみプッシュ通知が届かない

投稿者: Anonymous アプリはObjective-Cでの実装で、 サーバー側ではAPNsのライブラリにjavaPNS_2.2.jarを使用しています。 デバッグ環境、本番環境の差異は次の通りです。 デバッグ環境  iOS Apple Push Notification service SSL(Sandbox)  上記の証明書から.p12ファイルを作りサーバーに配置 本番環境  Apple Push Notification service SSL(Sandbox & Production)  上記の証明書から.p12ファイルを作りサーバーに配置 表題の通りデバッグ環境ではiOS12,13の端末共に届きますが、 本番環境ではどちらの端末にも届かない状態です。 証明書かProvisioningProfile辺りの問題かと思われるのですが、 詳細が見当がつきません。 原因が分かる方、よろしくお願いいたします。 解決 自己解決しました。 javaPNSで送るデバイストークンの形式が不正なものがあると デバッグ環境でもプッシュ通知の送信に失敗することを確認しました。 回答者: Anonymous

UIWebView上でYoutubeを再生する際の音声について

投稿者: Anonymous UIWebView上でYoutubeを再生する際に、イヤホンを使用しない場合でも端末本体から音声が出力されるようにしたいのですが、実現可能なプロパティなどありますでしょうか? WebViewのmediaPlaybackRequireUserActionはNOにしています。 以下のようにJavascriptで再生する方法も試してみる予定です。 http://qiita.com/babukuma/items/bc6ba19e814d8bb6ca91 その他にシンプルな実装方法でイヤホン使用時、未使用時ともに音声が出力される方法がありましたら教えていただきたく思います。 よろしくお願いいたします。 解決 Youtubeの再生と本体スピーカー/イヤホンの音の出力先を変更する実装です。 AVAudioSessionのoverrideOutputAudioPortメソッドで値設定することで制御しています。 AVAudioSessionPortOverrideSpeakerを設定すると本体スピーカーからの出力となります。 リファレンスは以下です。 AVAudioSession Class Reference #import “ViewController.h” #import <AVFoundation/AVFoundation.h> #import <AudioToolbox/AudioServices.h> @interface ViewController () @property (nonatomic, strong) UIWebView *webView; @property (nonatomic, strong) UIButton *loadBtn; @property (nonatomic, strong) UISwitch *portSwitch; @end @implementation ViewController – (void)viewDidLoad { [super viewDidLoad]; AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord…(Continue Reading)

Objective-CのPHFetchResultで拡張子を指定したい

投稿者: Anonymous 現在、PHFetchResultを使用して、画像ファイルのみ取得しています。 以下のようなソースです。 やりたいことは、tiff画像を除外したいのですが、例えば、拡張子を指定して画像を取得、又は、拡張子を指定して画像を除外、みたいな書き方はできるのでしょうか? // 作成日でソート PHFetchOptions *fetchOptions = [PHFetchOptions new]; fetchOptions.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@”creationDate” ascending:NO]]; // 写真のみ PHFetchResult *assets = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions]; NSArray *assetArray = [self getAssets:assets]; よろしくお願いします。 解決 PHAssetのリソースのuniformTypeIdentifierに画像フォーマットの情報が入っています。 以下のようにuniformTypeIdentifierを読んで、その値がpublic.tiff(kUTTypeTIFF)かをチェックすることでTIFF画像を除外できると思います。(このソースコードでは除外するところまでは行っていません。) PHFetchResult *result = [PHAsset fetchAssetsWithMediaType: PHAssetMediaTypeImage options: nil]; [result enumerateObjectsUsingBlock:^(PHAsset * _Nonnull asset, NSUInteger idx, BOOL * _Nonnull stop) {…(Continue Reading)

StoryBoardを使わないtabBarControllerの扱い方について

投稿者: Anonymous StoryBoardを使わずにtabBarAppを作っています。AppDelegate.mに以下のようなコードを書いています。 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; //tabBarの生成 [self initTabBar]; if([self isFirstRun]){ //初回起動の場合、別のviewControllerに遷移 } return YES; } 初回起動時に表示されるviewControllerはtabBarもnavigationBarも使っていません。初回設定が終わった後に通常時はじめに表示されるviewControllerに遷移すると、tabBarが生成されません。初回設定のviewControllerをすべて破棄してはじめの画面に遷移したいのですが、どうすれば良いでしょうか。 —追記— ご指摘ありがとうございます。以下がinitTabBarのコードです。 -(void)initTabBar{ FirstTabViewController *firstTabViewController = [[FirstTabViewController alloc] initWithNibName:nil bundle:nil]; SecondTabViewController *secondTabViewController = [[SecondTabViewController alloc] initWithNibName:nil bundle:nil]; ThirdTabViewController *thirdTabViewController = [[ThirdTabViewController alloc] initWithNibName:nil bundle:nil]; self.tabBarController = [[UITabBarController alloc] initWithNibName:nil…(Continue Reading)

iOSアプリをリッチにさせるアニメーションの選択肢

投稿者: Anonymous iOSでUIViewのアニメーションでは、view自体の位置やアルファ、色などのアニメーションが使えるのは分かりました。 アプリを利用していると他にも多彩なアニメーションがあると思います。 想定しているのはゲームなどではなく、ちょっとしたツールのアプリの中でリッチさを出すためのアニメーションについてです。 どのような形式のファイルを使うことが出来て、どのような選択肢、手法がありますか? 例えば、 ①画像の細かい繰り返しの動きがあるようなアニメーションではgifアニメーションを使うのでしょうか? ②Lineツムツムのオープニングムービーのようなものは動画でしょうか?一般的にアプリに使う動画圧縮形式はなんでしょうか? ③ゲームなどのアプリの起動時に、開発会社のロゴなどがアニメーションするようなものは動画でしょうか? など 参考になりそうな情報があまり見つかりませんでしたので、相談させてください。 iOS7以上を想定しています。 解決 下記のなかから、用途に応じて使い分けるとよいと思います。 Layer Transform Viewの移動、回転、拡大縮小等でしたら、Layer Transformを使うと良いです。たとえば、Viewを0.5秒間かけて180度回転させるには: [UIView animateWithDuration:0.5 animations:^{ myView.layer.transform = CGAffineTransformMakeRotation(M_PI); }]; CGAffineTransformConcat を使えば、組み合わせも可能です。 myView.layer.transform = CGAffineTransformConcat( CGAffineTransformMakeRotation(M_PI), CGAffineTransformMakeScale(1.1, 1.1)); リソースファイルが不要で、CPUやメモリ使用量も軽いので、シンプルなアニメーションであればLayer Transformがおすすめです。 UIImageView アニメーションGIFのように、画像を次々入れ替えたければ、UIImageViewのアニメーション機能があります。 UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; imageView.animationDuration = 1.0; imageView.animationRepeatCount = 2; imageView.animationImages = @[[UIImage imageNamed:@”1.png”], [UIImage…(Continue Reading)

ParseデータをPFQueryTableViewControllerのcustom cellに表示したい

投稿者: Anonymous PFQueryTableViewControllerのサブクラスを作りLabelをoutlet接続してParseのデータをLabelに表示しようとしていますが上手くいきません。 Parseチュートリアルや英語stackoverflowを読んでも解決できませんでした。 どなたか回答宜しくお願いします。 cell.textLabel.textやcell.detailTextLabel.textなどを使うのではなくUILabelを使ってセルの任意の場所にParseのデータを表示したいのです。 コンソールには[PFTableViewCell postLabel]: unrecognized selector sent to instanceと出ます。 AppDelegate.mではアプリ固有のIDとclientKeyを指定しています。 storyboardでCellのClassにMyTableCellを指定しています。 MyTableCell.h #import <Parse/Parse.h> @interface MyTableCell : PFTableViewCell @property (weak, nonatomic) IBOutlet UILabel *postLabel; @end MyPFQueryTableViewController.h #import <UIKit/UIKit.h> #import <Parse/Parse.h> @interface MyPFQueryTableViewController : PFQueryTableViewController @end MyPFQueryTableViewController.m #import “MyPFQueryTableViewController.h” #import “MyTableCell.h” @interface MyPFQueryTableViewController () @end @implementation MyPFQueryTableViewController – (id)initWithStyle:(UITableViewStyle)style { NSLog(@”%s”,__func__); self…(Continue Reading)

TableViewのセルの内容を再描画したくない

投稿者: Anonymous TableViewをスクロールするとレイアウトがぐちゃぐちゃになってしまい、調べた結果それはセルの再描画によるものらしいのでTableViewをスクロールしてもセルを再描画したくないのですが、どうすればよろしいでしょうか? ちなみに for (UIView *subview in [cell.contentView subviews]) { [subview removeFromSuperview]; } としても各セルの内容が全て消えてしまいうまくいきませんでした。 セルの数もあまりないので、とりあえず今の段階では再描画させない方法が知りたいです。 各セルにはカスタムセルを使っています。 どなたか分かる方がいれば教えていただきたいです。すみませんが、よろしくお願いします。 解決 セルの再描画は止められないことについて、説明します。まずは、検証用のサンプルコードです。 #import “ViewController.h” @interface ViewController () @end @implementation ViewController { int cellNumber; } – (void)viewDidLoad { [super viewDidLoad]; cellNumber = 1; } – (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.…(Continue Reading)

メモリ解放アプリの仕組みについて

投稿者: Anonymous メモリ解放アプリを、作成している所なのですが、 iOS側のプロセス一覧を取得する事ができず。 バックグラウンド起動しているアプリを取得してkillする事も出来ません。 mallocで、大容量を確保し解放することでメモリ解放アプリは出来ているのでしょうか。 調査しても見つけることが出来ない状態のため、御教授願えませんでしょうか。 解決 自プロセス以外のアプリをkillすることは、通常アプリでは不可能となります。 自プロセスが大量のメモリを確保し全体のメモリを圧迫することによりlauncherdによるkillが走るので、その後すぐに開放すれば一応メモリ解放アプリと言えなくもありません。 その際はlaunchdやSpringBoardにより以下のようなログが出るはずです。 com.apple.launchd[1] (UIKitApplication:com.example.MyApp[0x1234][123]) : (UIKitApplication:com.example.MyApp[0x1234]) Exited: Killed SpringBoard[30] : Application ‘MyApp’ exited abnormally with signal 9: Killed: 9 Androidでも似たようなアプリがたくさんあり、似たような仕組みでやっているのですが、、、 ただ、この方法で解放されるメモリは不要メモリクリーンしているというよりは、 バックグラウンドアプリを単にKillしているだけ=元々解放されても良いメモリ ですので このアプリを実行したおかげでメモリが多く使える、ということはありません。 このアプリを実行してもしなくても、別契機でメモリが必要になったら上記メモリが解放されるためです。 数値上の満足感以外にはメリットはないと思います。 (むしろバックグラウンドアプリがKillされることにより、該当アプリの再表示に時間がかかります。) 回答者: Anonymous

UIImagePickerControllerの横画面固定での表示

投稿者: Anonymous UIImagePickerControllerを横画面固定でフォトライブラリを開こうと思っています。 この記事を参考にしてカメラを起動することはできたのですが、 フォトライブラリのみ開けませんでした。 ご助言をお願いいたします。 解決 いつもこうやってしのいでいます。 ポイントは縦画面をアプリはサポートするが、各 ViewController は横画面しか表示しないようにコードで制御するということです。 info.plst の Supported interface orientations に Portrait (bottom home button) を追加するなどして横画面固定のアプリでも縦画面を表示できるようにする。 アプリ内では横画面固定になるように各 ViewController に以下のように横画面のみサポートするようにする – (BOOL)shouldAutorotate { return YES; } – (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; // 横画面のみ } UIImagePickerController も継承し上記のコードを追加し横画面固定になるようにする。 回答者: Anonymous

FMDBで前方一致または後方一致検索を行う

投稿者: Anonymous FMDBを使って前方一致や後方一致検索を行おうとしているのですが、以下のようなSQL文を書くと、「data argument not used by format string」という警告が出てきて実際にうまく値を取ってこれません。(下記のSQL文は前方一致検索を行っているつもりです) NSString *SQL = [NSString stringWithFormat:@”SELECT * FROM Animals WHERE name LIKE ‘%%@'”, animalName]; FMDBを使って前方一致または後方一致検索を行うにはどのように書けばいいでしょうか? どなたか分かる方がいれば教えていただきたいです。 すみませんが、よろしくお願いします。 解決 http://blog.ryuraku.com/2011/09/02/iphoneipadsqlitelike/ 上記のサイトに日本語で検索をするには日本語の前後に%を付けると書いていたので、以下のようにすると検索を行うことができました。 NSString *animalNameForPatternMatching = @”%動物%”; NSString *SQL = [NSString stringWithFormat:@”SELECT * FROM Animals WHERE name LIKE ‘%%%@'”, animalNameForPatternMatching]; 回答者: Anonymous

アプリ開発にMVVMパターンを適用する

投稿者: Anonymous 現在MVVMパターンでアプリを開発しているのですが、色々と調べたりコードを書いたりしても分からないところがあるので質問させていただきたいです。 サンプルで以下に自分なりにMVVMパターンを使用したごく簡単なコードを書いてみました。 ViewController.m @interface ViewController () @end @implementation ViewController { ViewModel *viewModel; } – (void)viewDidLoad { [super viewDidLoad]; viewModel = [[ViewModel alloc] initWithSelf:self]; } – (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } – (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [viewModel vmGetItemsCount]; } – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { return [viewModel vmSetTableViewCell:tableView :indexPath]; } @end ViewModel.m…(Continue Reading)

Swiftで、xibで作成したTableViewCellに、xibで作成したViewを追加

投稿者: Anonymous はじめに SwiftでiOSのアプリを開発しています。初心者です。 こういった質問サイトへの投稿経験も浅いため、マナーや通例に反した質問をしてしまっているかもしれません。 もしかすると、お門違いな点もあるかと思いますが、ご容赦願います。 本題 所定のボタンを押すことで、xibで作成したTableViewCell(カスタムクラス : CustomTableViewCell.swift)の中に、xibで作成したView(カスタムクラス : CustomView.swift)を追加(addSubview)しようとしています。 しかし、以下問題が生じています。解決方法を教えてください。 CustomTableViewCell.swift class CustomTableViewCell: UITableViewCell { @IBOutlet weak var viewInCell: UIView! override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } } CustomView.swift import UIKit…(Continue Reading)

Interface Builderで作ったTableViewでセルの設定ができない

投稿者: Anonymous XibでUIViewを作り、その上にTableViewを乗せて、そのTableViewにTableViewCellを乗せようとするのですが、キレイにセルが乗らずうまくいきません。また、attributes inspectorにもContentとPrototype Cellsの項目がありません。XibではTableViewを扱うことができないのでしょうか? どなたか分かる方がいれば教えていただきたいです。 すみませんが、よろしくお願いします。 解決 InterfaceBuilderには、StoryBoardのカスタムセルを作成する機能はありません。 UITableViewCellはinitWithStyle:を用いて組み込みのスタイルを利用するか、UITableViewCellのみのxibを別途作成し、tableView:cellForRowAtIndexPath:でUINibから生成するというのが昔のパターンでした。 回答者: Anonymous

iOSアプリにおけるmBaaS使用時のApplicationKey、ClientKey(Secret)のセキュリティについて

投稿者: Anonymous mBaaSを使ったiOSアプリを作る際、AppDelegate.swiftに下記のようなコードを書くと思います。(※例はNiftyCloudMobileBackend) NCMB.setApplicationKey(“XXXXXXX”, clientKey: “YYYYYYYY”) このキーが漏れてしまうと、情報の更新が外部から可能になってしまうと思います。 例えば、git管理の話ならばKeyを別のファイルに区切ってgitignoreしてしまえばよいと思いますが、アプリのリリース時にこの部分はどうすべきでしょうか? monacaやJSの場合、herokuにClientKeyを置いて回避する方法(http://blog.mb.cloud.nifty.com/?p=7410) 等が見つかりましたが、iOSのクライアントのみでできる対策はどのようなものがありますでしょうか? 知見のある方はご教示の程、宜しくお願い致します。 解決 クライアント側のみでできる対策としては難読化があります。 例えば、以下のライブラリを使って文字列を難読化することができます。 https://github.com/UrbanApps/UAObfuscatedString // Password という文字列をUAObfuscatedStringをつかって表現する let password = “P”.a.s.s.w.o.r.d このようにすることによって、バイナリ上に連続した文字列としてパスワードが現れることを防ぎ、stringsコマンドなどの簡易的な方法ではパスワードを抜き出すことができなくなります。 (※ これはあくまで簡易的な対策です。stringsより本格的な解析をされるとパスワードが抜き出されてしまう可能性があります) 回答者: Anonymous

(Objective-Cの質問)UIButtonのstateがUIControlStateSelectedのとき、自動で表示される青い角丸背景を消す方法を知りたいです

投稿者: Anonymous UIButtonにはstateによってtitleを変えることができる、[- (void)setTitle:(NSString *)title forState:(UIControlState)state]メソッドがありますが、これを使ってUIControlStateNormalのときと、UIControlStateSelectedのときと、タイトルを変えようとしています。 私は見た目としてタイトルのテキストだけを変えたいと思っているのですが、いざselectedプロパティをYESにすると、タイトルは変更されますが、青い角丸背景が自動で表示されてしまいます。この青い角丸背景を消したいです。 <試したこと> titleLabel.backgroundcolorプロパティで色を指定する。 –> 青い角丸背景の更に奥の背景の色が変わりました。解決できません。 [- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state]メソッドでイメージを指定する。 –> NormalとSelectで切り替わっているアニメーションの途中は青い角丸背景が一瞬見えますが、アニメーションが終わると指定したイメージに変わり、青い角丸背景は消えました。>ですが今回やりたいことはタイトルのみ変えたいだけなので解決できません。 UIButtonのサブクラスを作り、以下のようにオーバーライドする。 –> 何も表示されなくなってしまいました。恐らくdrawRectの中もオーバーライドする必要があるのかな。。と思ってはいるのですが、そこに手を付けると拡張というよりカスタムビューを作っているのと同じじゃないか?と思い、他に方法があるはずだと思って質問しました。 UIButtonSubClass.h #import <UIKit/UIKit.h> @interface UIButtonSubClass : UIButton @end UIButtonSubClass.m #import “UIButtonSubClass.h” @implementation UIButtonSubClass { NSString *_normalTitle; NSString *_selectTitle; } – (instancetype)init { self = [super init]; if (self) { self.selected = NO; } return self;…(Continue Reading)

social.frameworkを使わないSNSの実装

投稿者: Anonymous  social.frameworkを使ってFacebookとTwitterに投稿できる機能を作ったのですが、投稿の際のiOS標準のダイアログを表示させたくなく、social.frameworkを使わない実装に切り替えたいと思っています。しかし、調べてみてもどうすればいいか分からず困っています。僕がやりたいこととしては、「ユーザにIDとPassを入力させて認証が通ると定型文が投稿される」という流れです。ひょっとしてsocial.frameworkを使ったままでも上記の流れの処理は可能でしょうか?すみませんが、お返事いただけると幸いです。宜しくお願いします。 解決 メッセージ入力用のダイアログを出したくないだけであればsocial.frameworkとあわせて Accounts.frameworkのACAccountStoreを使うことでOSで管理されるアカウントを使って 自前でのメッセージ投稿処理を作ることができる思います。 「socialframework ACAccountStore」で検索するとサンプルが見つかると思いますが注意点が一つ。 古いサンプルだとWebサービス側のAPIが変わっていて、そのままのコードだと投稿できなかったりします。例えばTwitterの場合、 http://api.twitter.com/1/statuses/update.json はでは投稿できず https://api.twitter.com/1.1/statuses/update.json を使う必要があります(将来さらに別なものに変わるかもしれません)。 回答者: Anonymous