A path doesn't have “a position”. A path is a set of points (defined by line and curve segments). Every point has its own position. Perhaps you want to rotate the path around a particular point, instead of around the origin. The trick is to create a composite transform that combines three individual transforms: Translate the origin to the rotation point. Rotate. Invert the translation from step 1.
UIImageの画像をリサイズ、回転、反転したい場合がある。こんなときにはQuartz 2D APIを使用する。Quartz 2D APIはCore Graphicsフレームワークの一部。 CTM(Current Transformation Matrix)を使う。主に以下の3つ。 CGContextTranslateCTM : 原点の平行移動 CGContextRotateCTM : 原点を中心として座標系を回転 CGContextScaleCTM : 原点を中心として座標系を拡大縮小 ①とりあえずそのまま描画 - (UIImage*)drawImage { UIImage *original_img = [UIImage imageNamed:@"frog"]; UIGraphicsBeginImageContext(self.view.bounds.size); [original_
I am new to Automatic Reference Counting with LLVM and Objective-C, and have a question about returning CGImageRefs from my Objective-C function. In the days of manual reference counting, it was possible to simply cast the CGImageRef to an id, autorelease it, then return the original CGImageRef. With ARC, I am aware that you can direct the ARC system to autorelease and return your retainable objec
I have a method that returns a CGImageRef object. It contains this call: CGImageRef posterFrame = [avAssetImage copyCGImageAtTime:time actualTime:nil error:&error]; ... return posterFrame; This situation, as I understand it, calls for an autorelease. But I have no idea how to do it. I've tried using CFCollectable(), but it doesn't work. Any ideas?
こんにちは。エンジニアをしています、鷲見と申します。 今回はアフィン変換についてです。 あらまし Objective-Cにはアフィン変換を行う機能があり、簡単にUIViewの幾何学的変換を行うことができます。 例えばUIViewを回転したい場合は、以下のように書くことができます。 // ビューを30度回転 CGFloat angle = 30.0 * M_PI / 180.0; view.transform = CGAffineTransformMakeRotation(angle); この他にもいろいろな機能があるのですが、その中にCGAffineTransformMakeという アフィン行列を指定してアフィン変換を行う機能があります。 さて、このアフィン行列とは何なのでしょうか?そもそもアフィン変換とは一体何者なのでしょうか? というわけで本ブログではアフィン変換の理屈について解説して
There are two drawRect methods: - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSaveGState(context); // do drawing here CGContextRestoreGState(context); } And - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); UIGraphicsPushContext(context); // do drawing here UIGraphicsPopContext(); } UIGraphicsPushContext / UIGraph
よく、以下のようなコードでオフスクリーンコンテキストを作成し、 描画の後画像を得るサンプルを見ます。 コードが単純なためか、非常に広く使われていると思います。 UIGraphicsBeginImageContextWithOptions(CGSizeMake(1024, 1024), NO, 1.0); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextFillEllipseInRect(context, CGRectMake(0, 0, 1024, 1024)); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); ですが、これは本来やらなくていい処理をしていると思いませんか? という
iOS7・・・ iOS7・・・ ウーン・・・ iOS7のUITableViewCellのサブクラス、つまりカスタムセルがなぜか描画されませんでした。 一応解決して、原因もなんとなくわかったのでメモ。 ↓なぜか描画されない。 描画してた仕組みはこんな感じで、- (void)drawRect:(CGRect)rectに書いていました。 - (void)drawRect:(CGRect)rect { [super drawRect:rect] ; // draw draw ... } リファレンスを見るとこんなのが。 Whether you use a predefined or custom cell, you can change the cell’s background using the backgroundView property or by changing the inheri
前回も座標系だったんですけど今回も座標系。 CGGeometry にはいろいろ地味に便利な関数が揃ってるんですけどあまり日の目を見ない気がするので CGRectDivide について書こうかと思います。 使い方と得られる結果が理解しにくい CGRectDivide は任意の Rect を指定した方向から切り取り2つの Rect に分割してくれる関数です。 定義は以下の通り。 void CGRectDivide ( CGRect rect, CGRect *slice, CGRect *remainder, CGFloat amount, CGRectEdge edge ); 実行するとこんな感じ。 CGFloat amount = 44.0f; CGRect baseRect = self.view.frame; CGRect sliceRect = CGRectNull; CGRect
I'm drawing a graph on a CALayer in its delegate method drawLayer:inContext:. Now I want to support Retina Display, as the graph looks blurry on the latest devices. For the parts that I draw directly on the graphics context passed by the CALayer, I could nicely draw in high resolution by setting the CALayer's contentScale property as follows. if ([myLayer respondsToSelector:@selector(setContentsSc
このチュートリアルは次の言語で閲覧可能です: 英語こちらはCore Graphicsチュートリアル: 曲線とレイヤーからの続きとなります。 アプリを完成させよう! おめでとうございます!ここまで、やっちゃいましたね!後少し手を加えて完成させちゃいましょうね。感情に合わせて背景色を変化させるにはskyにそれらを反映させる必要があります。感情の変化の値はSkyViewクラスに渡されているので、以下の様に変更して下さい: drawSkyInRectメソッドを以下に置換えて下さい: -(void) drawSkyInRect: (CGRect) rect forMode: (NSInteger) mode inContext: (CGContextRef) context withColorSpace: (CGColorSpaceRef) colorSpace { UIColor * baseCo
Update アップデート4/17/2013 Xcode4.6、及びARCに対応しました。(オリジナル投稿者:Ray Wenderlichアップデート投稿者:Brian Moakley)。 このチュートリアルは初めての”Core Graphics”シリーズ第3弾、実践的なプロジェクトを例に”Core Graphics”を学びましょう! シリーズ・パート1では、Table Viewのセルの背景をカスタマイズする事で線の引き方と長方形、グラデーションの作成方法を学びました。 In the シリーズ・パート2では、Table Viewのセルの”header”をカスタマイズする事で、影とグロスエフェクトの作成方法を学びました。 このチュートリアルでは”footer”と少しのスパイスを加える事でTable Viewを完成させます。加えて”アーク(円弧)”の描画と”クリップ”や”パス”を使う方法を学び
アップデート4/16/2013 Xcode4.6、及びARCに対応しました。(オリジナル投稿者:Ray Wenderlichアップデート投稿者:Brian Moakley)。 このチュートリアルは実践的な”Core Graphics”チュートリアル•シリーズの第2回目となります。 The シリーズ、パート1 のチュートリアルでは、Table View Cellの背景色を作成する事で、線と四角形とグラデーションの描画を勉強しましたね。 今回のチュートリアルではTable Viewの”header”のカスタマイズに移りたいと思います。今回学ぶ事は前回のチュートリアルで学んだ知識をより強固なものにして影の描写と”グロス•エフェクト”になります。 もし必要なら前回のチュートリアルのサンプルプロジェクトをダウンロードしてください。 それでは、始めます! Table Viewカスタマイズの次なるステッ
アップデート4/15/2013 Xcode4.6、及びARCに対応しました。(オリジナル投稿者:Ray Wenderlichアップデート投稿者:Brian Moakley)。 “Core Graphics”はiOSに於いて非常に優れたAPIなんです。これを使う事によってもの凄くカッコ良くUIをカスタマイズする事が出来るんです。これが使える様になれば、グラフィック担当のアーティストなんか必要なくなります。 でも、多くのiOS開発者が、何故か”Core Graphics”に対して最初は威圧感を感じます。それは、あまりに広大なAPIであるという事と、開発途中に思わぬ障害に巻き込まれる事があるからです。 これは、チュートリアルですから、”Core Graphics”に対して多くの開発者が感じるちょっとだけ取っ付きにくい感を、これから一緒に作成するプロジェクトを通して払拭して行きたいと思います。まず
Create a cool grip pattern effect with Core Graphics! アップデート4/19/2013Xcode4.6,ARCに対応しました。 (オリジナルのチュートリアルはRay Wenderlich氏によって執筆されました。このチュートリアルはBrian Moakley)氏によりアップデートされました。 “Core Graphicsチュートリアルシリーズ”へようこそ!このチュートリアルシリーズは入門編として比較的実践向けの例を使って学習して行きたいと思います。 シリーズパート1、パート2、そしてパート3では最初から最後まで”Core Graphics”のみを使用して”Table View”をカスタマイズして行きました。 そしてパート4では”Glossy”な”UIButton”を”Core Graphics”のみを使って作りました。 このチュートリアル
ちょっと便利 CGRectを中心(center point)を変えずに領域を変更する。 dx,dyの分だけふちがへる。 dx,dyを負にするとふちが膨らむ。 結局 横の長さはdx*2 縦の長さはdy*2 だけ縮まります。 応用例 UItextFieldの文字位置をデフォルトから変えたいときは以下のように調整できます。 - (CGRect)textRectForBounds:(CGRect)bounds { return CGRectInset(bounds, textOrigin.x, textOrigin.y); } - (CGRect)editingRectForBounds:(CGRect)bounds { return CGRectInset(bounds, textOrigin.x, textOrigin.y); } Register as a new user and use
イメージの描画以外のことも、いくつか補足しておきましょう。まずは、塗りつぶしに関するものです。イメージは指定の色で塗りつぶすことができますが、単色ではなく、複数色でグラディエーションすることもできます。 グラディエーションは、グラディエーション情報を管理するための専用のデータを用意し、これを使ってグラディエーションの設定を行います。下のリスト欄に簡単なサンプルを挙げておきます。これを見ながら、処理の流れを整理していくことにしましょう。 1. 色情報を配列にまとめる まず最初に、グラディエーションで使用する色の情報を配列にまとめておきます。これは、RGBAの計4つの輝度を0〜1の実数で表した値を1つずつ並べた形になります。ざっとこんな感じですね。[ R値 , G値 , B値 , A値 , R値 , G値 , B値 , A値 , ……]2つの色を使う場合は、計8個の値が用意されます。ここでは3
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く