1時間ほどですっごい簡単なネタアプリを作ろうと思ったら、
躓いた。。。orz
UIScrollViewでズームアウトをすると、左上に勝手に移動しやがる。。。
それも、かっこよくアニメーションしながら移動しやがる。
憎いぜApple
いや、縮小した場所にいてくれたらいいから、、、
このページを参考にsrollViewDidEndZoomingを変更しましたが、
挙動が変
「http://www.electrodream.jp/iphonedev/index.php/2009/04/uiscrollviewの中身をズームアウトした際、左上00に自動的/」
- (void)scrollViewDidEndZooming:(UIScrollView*)scrollView withView:(UIView*)view atScale:(float)scale { //ここでズームの変更も拾えるので、サイズを設定する// CGRect newRect = scrollView.frame; float firstWidth = 261.f; float firstHeight = 420.f; //firstWidthにはScrollViewの最初の幅が入っている if(firstWidth < view.frame.size.width){//超えた場合は0に// newRect.origin.x = 0; }else{ CGFloat fTemp = (firstWidth - view.frame.size.width) / 2; newRect.origin.x = fTemp; } //firstHeightにはScrollViewの最初の高さが入っている if(firstHeight < view.frame.size.height){ newRect.origin.y = 0; }else{ CGFloat fTemp = (firstHeight - view.frame.size.height) / 2; newRect.origin.y = fTemp; } _scrollView.frame = newRect; }
アニメーションしなくていいんだけどなぁ。。。
表題の通りですが、なにやら詰まってしまった。
NIBsを使うのだろうけど、、、、
わ、わからないっす。
■ApplicationDelegate.h
UIWindow *window; UITabBarController *tabBarController;
■ApplicationDelegate.m
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:tabBarController.view];
}
▼MainWindow.xibは
FIle's Owner
Tab Bar Controller( tabBarControllerとリンク )[*1]
└Tab Bar(UITabBar)
└Selected... ViewController( TestViewController )[*2]
└UITabBarItem
・[1] UITabBarControllerの設置 - tabBarControllerとリンク
・[2] 一つ目のアイテムのClassをTestViewController
・今は必要ないので2つ目は削除
■TestViewController.h
■TestViewController.m
特になし
TestViewController.xibは
File's Owner(TestViewController)
NavigationController(UINavigationController)[*1]
└NavigationBar
└ViewController( TestTableViewController )[*2]
・[1] UINavigationControllerの設置
・[2] UINavigationController内のUIViewControllerのClassをTestTableViewControllerに変更
■TestTableViewCOntroller
新規作成のTableViewControllerです。
こんな感じです。
どこかおかしいのでしょうか?
画面は真っ黒です。
はやく、解決したことをここに書きたいのに、、、
また詰まっちゃいました。
■したい事
5枚のCGImageを透明度を変えて合成
■CODE
//tmpPhotosArrayには5枚ぐらいのCGImageRefが入っています。
CGSize size = CGSizeMake(320, 420);
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
for(int i=0; i<kPhotoNumber;i++){
CGImageRef cImg = (CGImageRef)[tmpPhotosArray objectAtIndex:i];
[cImg setAlpha:0.1]; //ここでエラー(*エラー1)
CGContextDrawImage(context, rect, cImg);
CFRelease(cImg);
}
UIGraphicsEndImageContext();
//ここでContextをUIImageに変換ってのを考え中...
(エラー1)
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFType setAlpha:]: unrecognized selector sent to instance 0x13ca90'
ってな感じになっちゃうんですよ。。。
そもそも、setAlphaつかうのかな。。。
obysUIImageのdrawInRectを使えば透明度を指定して画像を重ねられますよ。
UIImage* img1 = [UIImage imageNamed:@"image1.png"];
UIImage* img2 = [UIImage imageNamed:@"image2.png"];
CGSize size = { 240, 320 };
UIGraphicsBeginImageContext(size);
CGRect rect;
rect.origin = CGPointZero;
rect.size = size;
// レイヤー1 ベースになる画像
[img1 drawInRect:rect];
// レイヤー2 透明度を指定して重ね合わせる
[img2 drawInRect:rect blendMode:kCGBlendModeNormal alpha:0.8];
UIImage* shrinkedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageView.image = shrinkedImage;
paella画像に対して透明度を設定しようとしていますが、画像のデータを変えるのではなく、ビューに対して透明度を設定する、という視点ですよ。
CGImageRefはRefとあるとおりReadOnlyです(確か)。
wadadanet>>obysさん,paellaさん
ありがとうございます!!
解決しました!
CGImageRefってそういう使い方しかできないんですね。
なにやら、勘違いしてたみたいです。
本当にありがとうございました。
かなり詰まってます。
rootViewController
├gameViewController
└gameView
├highScoreViewContlloer
└highScoreView
1)「rootViewController.h」
GameViewController *gameViewController;
GameView *gameView;
2)「rootViewController.m」
gameViewController = gameViewController alloc] initWithNibName:@"GameView" bundle:nil];
みたいな感じで作ってるけど、
ゲームが終わったら、[gameViewController release]しますよね?
で、またゲームを作ろうとしたらどうしたらいいんだろ。。。
2)をもう一度実行したら、releaseしてるからつくれないし。。。
たぶん、初心者丸出しの悩みなんだろうなぁ。。。orz
fladdict一番手っ取り早いのは、[gameViewController restart] をつけて、リリースしないとかではないかと。
HisScoreViewControllerって重くなさそうだからそれでいけるんじゃないでしょうか。
horigood最初にallocで作っているわけですから、「releaseしてるからつくれない」ってことはないはずです。上記の説明だけでははっきりしませんが、どこかで何か勘違いされているような気がします。
wadadanet>>fladdictさん、horigoodさん
ありがとう御座います。
releaseしても使いまわせるんですね。
もうちょっとがんばってみます。
horigood「使いまわせる」というのとは、ちょっとニュアンスが…
初めにalloc & init した gameViewController が、他のオブジェクト内でretainiされていなければ(保持カウントが1ならば)、releaseした時点で保持カウントは0になり、deallocされてオブジェクトの実態は無くなります。
再度、gameViewController を使う場合には、改めて alloc & init してやるわけですから、これは最初のオブジェクトとは別物です。
ちなみに、releaseと再allocを別のメソッドでおこなう場合には、releaseの際に
[gameViewController release];
gameViewController = nil;
と、変数に nil を代入しておいた方が安全です。
wadadanet基本が分かってなかったみたいです。
参照カウントってのがあるんですね。。。
解決しそうです。
ありがとうございました。
Tab Bar Controllerの中に入るように、NavigationControllerのアイテムを
ドラッグするとよく分かります。
あと「テレビ番組表」コードが参考になると思います。