UIView の位置やサイズを知るプロパティに frame と bounds があります。この frame とbounds の違いを簡単にまとめて見ました。 簡単にまとめると以下のようになります。 frame はスーパービューから見た座標 bounds はローカルのビューから見た座標 実際に親子関係のビューを作成して確認してみます。 ViewB は ViewA の中に配置されています。 [ViewA addSubView:ViewB] のような関係です。 この時の frame と bounds はそれぞれ以下のようになります。 ViewA.frame origin: 0,0 size: 550×400 ViewA.bouns origin: 0,0 size: 550×400 ViewB.frame origin: 200,100 size: 200×250 ViewB.bounds or
たとえばこんな状態になった時に、通常ならビューより下にあるボタンにはタッチできません。 だけど、UIViewの「- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event」をオーバーライドすることで、タッチ判定を無視することができ、後ろに隠れているビューにもタッチすることができます。 しかも、指定のビューだけをスルーするので、画像にある「ue Button」にもタッチができるのです!スゴーイ。 コードは以下の感じ。 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ // タッチされたビューを取得する UIView *hitView = [super hitTest:point withEvent:event]; // タッチされたものがselfだったら
こんにちは。エンジニアをしています、鷲見と申します。 今回はアフィン変換についてです。 あらまし Objective-Cにはアフィン変換を行う機能があり、簡単にUIViewの幾何学的変換を行うことができます。 例えばUIViewを回転したい場合は、以下のように書くことができます。 // ビューを30度回転 CGFloat angle = 30.0 * M_PI / 180.0; view.transform = CGAffineTransformMakeRotation(angle); この他にもいろいろな機能があるのですが、その中にCGAffineTransformMakeという アフィン行列を指定してアフィン変換を行う機能があります。 さて、このアフィン行列とは何なのでしょうか?そもそもアフィン変換とは一体何者なのでしょうか? というわけで本ブログではアフィン変換の理屈について解説して
自分がAuto Layoutを使ってみた感じでは、回転なしの基礎的なことを習得してプロジェクトに使えるようになるのに6時間位は使ってしまって、これは勉強するの無駄じゃないのって気もしないでもないので折角なら忘れないようにおさらい。 Auto Layoutの使いどころ Auto Layoutは画面サイズによって複数のUIコンポーネントの座標値がそれぞれ微妙に変化する場合に使える。画面デザインによるが、それ以外はAuto Reisizeと自前での座標値計算を行うことでなんとかなる事が多い。 また、回転を考慮する場合もAuto Layoutのほうが楽かもしれない。 Auto Resizeのできること Auto Resizeは親Viewからの相対的な位置と大きさの自動的な適用ができる。 例えば 画面の下にToolBarを固定することが出来る UITableViewCellのなかで画像位置を固定する
Note from Ray: Tutorial Team member Matthijs Hollemans (the iOS Apprentice Series author) has ported this tutorial to iOS 7 as part of the iOS 7 feast. We hope you enjoy! Have you ever been frustrated trying to make your apps look good in both portrait and landscape orientation? Is making screen layouts that support both the iPhone and iPad driving you to the brink of madness? Despair no longer, I
はじめに iOSアプリ開発でInterfaceBuilderやStoryboardを使うか使わないかというのは宗教論争の火種の一つとなっていますが、自分の場合なるべく使いたくない派です。 画面回転やiPhone/iPadユニバーサル対応、そしてiOS7のステータスバー周りの仕様変更など、やり方を調べるよりささっとコードで調整できる、そして現状アプリがどういう仕様になっているかが一目瞭然なのはコードの方ではないかと思います。 コードでレイアウト調整をする場合、UIViewのサブクラスをViewController毎に用意し、その中でlayoutSubviewsをオーバーライドするとわかりやすく書くことができます。 ViewControllerでレイアウトする良くない例 自分は3年間くらいこのやり方でやっていたのですが(恥ずかしながらlayoutSubviewsを知らなくてもiOSアプリは書け
Note: I noticed this question a while ago, but I'm only posting my answer now because the NDA has been lifted Why does it not appear for AutoLayout? As you may have noticed, iOS 7 brings about a whole new look. The look of UI elements have changed, but also so have some of their sizes (or metrics in general). This can make interface design to accommodate both iOS 7 and it's predecessors a bit of a
One of the pieces of code I find myself re-using constantly is creating a gradient background for a UIView in iOS. This example will show two examples of how to create a simple gradient background. First, in Xcode, create a new Single View iOS application Then create a new file File > New > New File and call this file “BackgroundLayer”, this will create BackgroundLayer.h and BackgroundLayer.m auto
iOSのUIViewクラスで、あるビューにタッチイベントを処理させたくないときには userInteractionEnabled= NO; とやれば済む話ですが、そうするとそのビューにぶら下がっているサブビューにもイベントが渡らなくなってしまいます。しかし、そのビューには処理させたくないけれども、サブビューには渡したい、というときにはどうすればよいかというお話。 結論 hitTest:withEvent:をオーバーライドしましょう。 hitTest:withEvent:とはなにか 渡ってきたタッチイベントを、それ自身あるいはそのサブビューのうちどれが処理するのか(あるいはどれもしないのか)、を返すメソッド。そのビュー自身が処理する場合はselfが、サブビューが処理する場合は該当するサブビューが、誰も処理しない時はnilが返ってきます。 hitTest:withEvent:は何をやっているの
Interface Builderで画面をデザインする時、基本的には1つの画面に1つのViewControllerと1つのXibファイルを用意することになります。しかし、これだと複数の画面や別のアプリでも使い回せるはずのUIパーツをそれぞれのXibファイルに用意しなければならなかったり、一つの画面に同じパーツを複数並べて使うといったことがやりにくくなります。 再利用可能なUIパーツをInterface Builderを使って簡単につくる方法を調べてみたのですが、基本的な事項の割にはドキュメントやサンプルが見つけられずに苦労してしまったのでまとめておきます。(Appleのサンプルでは一部をIBで、一部をコードで行うものはありましたが、できることなら極力IBを使うようにしたいところです。) まず、メインのViewControllerのXibファイルにViewControllerを追加してパーツ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く