我想用一根手指触摸在中心点上旋转下面的图像...
我想用触摸旋转图像时显示带有标签的图像值.
我已完成图像旋转,但问题是如何根据旋转设置图像的值.
旋转角度增加,因此我无法设置该值.
谁能帮我?
代码如下
float fromAngle = atan2(firstLoc.y-imageView.center.y,
firstLoc.x-imageView.center.x);
NSLog(@"From angle:%f",fromAngle);
float toAngle = atan2( currentLoc.y-imageView.center.y,
currentLoc.x-imageView.center.x);
NSLog(@"to Angle:%f",toAngle);
// So the angle to rotate to is relative to our current angle and the
// angle through which our finger moved (to-from)
float newAngle =angle+(toAngle-fromAngle);
NSLog(@"new angle:%.2f",newAngle);
CGAffineTransform cgaRotate = CGAffineTransformMakeRotation(newAngle);
imageView.transform=cgaRotate;
angle = newAngle;
Run Code Online (Sandbox Code Playgroud)
谁能帮我 ?
我发现这个问题的文档不清楚:
假设你正在使用iOS(不是Mac的情况,不需要提及差异).说严格是4.0+(不需要提及旧操作系统的差异).假设我们严格自动加载NIB.
假设你有一个UIViewController,BigView.假设NIB文件中有十几个所谓的"顶级"项目......可以是自定义控件,图像或其他任何内容.
假设您肯定会在应用程序运行期间多次明确创建然后摆脱BigView.所以:
对于NIB中的其中一个顶级项目,有三种可能性:
(1)根本没有任何形式的IBOutlet.
(2)你有一个连接的IBOutlet - 但不是属性.
(3)你确实有一个连接的IBOutlet属性(为了避免混淆,我们会说保留属性).
那么BigView发布时项目会发生什么?
在(3)的情况下,您必须明确释放.如果你不这样做,它将在视图消失后徘徊.没问题.
在(1)的情况下,我假设(但是任何人都可以确认?)当BigView消失时该项目将被释放.
在(2)的情况下,不清楚会发生什么.......
看看众所周知的参考链接:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html这是非常可疑的:
"在iOS中,nib加载代码使用setValue:forKey:方法重新连接每个插座.该方法类似地寻找一个合适的访问器方法和[所以如果没有一个发生的话会发生什么?告诉我们APPLE ...]当失败时,它会回到其他方式...... [GOOD GRIEF!]"
并查看此文档:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html并向下滚动到"Nib对象保留"
所以......
"nib文件中的对象创建时保留计数为1,然后自动释放" Fantastic ..
可是等等!读几句话......
但是,...如果没有可用的setter方法,则使用可用的setter方法或默认保留对象
他们在说什么?
它们是否意味着如果没有可用的setter(ivar,但没有属性),它是AGAIN RETAINED(除了他们在前一条款中提到的"保留") - 或者,他们只是重复自己,即"默认保留对象"与他们之前刚刚讨论的"保留"相同("使用保留计数1创建然后自动释放").
为什么他们甚至会提到自动释放,如果不是这样的话?
确实 - 如果有人真正明确知道这个问题的答案...... 你怎么知道的?!?你问过DTS,还是通过测试,或者?我建议,关键文档(只是粘贴)是非常不清楚的.
再次 - 如果你有一个IBOutlet,但不是一个属性,连接到"顶级"对象.. 你有责任释放它吗?它保留了吗?在那种情况下?
就此而言....仅仅在情况(1)中,当BigView消失时,它会被释放吗?我当然会认为情况确实如此,但谁知道呢?
问题是如果你使用IBOutlet iVar会发生什么,而不是属性......
我愚蠢地从来没有想过这个/假设太多,有没有人有决定性的答案?干杯!!
为了记录,我做了一个测试项目.
事实上(令我惊讶的是)将IB元素连接到IBOutlet的单纯行为实际上显然增加了一个保留.
(我只能从伪劣的文件中假设,在那种情况下你特别得到:保留,自动释放,保留 - 导致一个保持平衡.)
所以,这就是答案.
我将发布演示项目.我也将任何读者引导到下面的Jonah的答案,它完美地解释了setValue的行为:forKey:干杯
我在使用estimatedHeightForRowAtIndexPath时发现了一个令人震惊的问题或反直觉行为
(1)我的桌子行高度差异很大.最终结果可以从111到约400.
(2)我绝对完美地计算每一行的高度.我手头有一个数组,也就是缓存.
{请注意,这正是苹果工程师现在推荐的......例如,第5点.在UITableView中使用自动布局进行动态单元格布局和可变行高度 }
(3)当heightForRowAtIndexPath要求高度时,我确实给它绝对正确的高度.
(4)当我构建单元格时,实际上,我将其构建到正确的高度(如(2)和(3)中所示).
{注意 - 当然iOS最终会调整单元格的高度,而不是"我".}
这一切都完美无缺.
也就是说,每个单元格都是由iOS构建的,其高度恰好是heightForRowAtIndexPath中给出的高度.
现在,我添加代码......
-(CGFloat)tableView:(UITableView *)tableView
estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 120;
}
Run Code Online (Sandbox Code Playgroud)
事实上,表没有更长的工作..................行高成为随机!
有没有人看到这种令人难以置信的行为?
我做了各种各样的测试,试图确定地狱估计的HeightForRowAtIndexPath的作用.起初,我认为它可能提供高度的下限.所以,150 ..甚至我的小细胞都会错误地达到150高度.但事实并非如此.
我认为它可能会做这样的事情:说你的estimatedHeightForRowAtIndexPath值是150.它有时使用150来表示(事实上()实际上是大小或更小的行,但有时它会从heightForRowAtIndexPath获得实际大小.
另一方面,如果你为estimatedHeightForRowAtIndexPath设置了一个小于实际存在的值(在我的例子中说是100),它几乎"完全不起作用"你只是得到了似乎只是随机高度的东西细胞.
非常高的细胞似乎正常工作,也许类似"如果从heightForRowAtIndexPath的高度是估计的两倍,那么它确实使用真正的高度"
要清楚,它似乎从来没有让细胞太小,但它往往使它们太大.
要清楚,我没有使用autolayout,它只是你必须构建的单元格类型.(我担心我不知道自动布局如何.)这只是Xcode5/iOS7 +.
如果你正在解决这个问题,GTScrollNavigationBar接近现成的navBar问题解决方案!
这里50点恩惠,惊人的没有答案.
例如:在2014年的iPhone上,打开Safari,加载任何网页.
查看底部的iOS工具栏.
现在只需移动几个像素就可以上下移动手指.

基本上底部的工具栏会随着手指移动.此外,当您按照特定逻辑滚动页面时,工具栏稍后会出现/消失.
但是交互规则非常复杂,并且在隐藏期间涉及手指开/关,距离匹配,当您在页面下方时的手势,非常短页面的特殊情况等等.
我想要完全复制Apple的行为.
(我们应该与Apple UX相匹配似乎是明智的.)
有没有办法做到这一点?Apple是否为此提供了一个一步的命令,我不知道?或者您是否必须费力地复制这个概念?
谢谢.
顺便说一句,以下逻辑是可靠的,并将大致复制 Apple的方式:
-(void)feedIsScrolled:(CGFloat)scrollNewOverallYPosition
{
// call this routine when scrollViewDidScroll:
self.feedIsScrolledDelta =
scrollNewOverallYPosition - self.feedIsScrolledPrevious;
self.feedIsScrolledPrevious =
scrollNewOverallYPosition;
// nb, you do those only in this routine, NOT the following routine.
if ( scrollNewOverallYPosition < 15.0 )
{
.. animate in the bar
return;
}
if ( self.feedIsScrolledDelta > 0.0 ) …Run Code Online (Sandbox Code Playgroud) 这个问题与使用着色器有关(可能在Unity3D环境中,但是Metal或OpenGL很好),
在网格最小的立方体上实现圆形边缘.

我只想使用12个三角形的极简主义网格立方体,
然后通过着色器,
实现每个块的边缘(/角)略微倾斜.
事实上,这可以用着色器完成吗?
谢谢,着色大师!
在一个广泛使用 Firebase 的大型应用程序中,我正在尝试分析,
-FIRDebugEnabled设置得很好。
设备上的日期/时间设置正确。
我已经尝试了所有模拟器、系留设备,甚至构建到 TestFlight。
所需的东西在应用程序启动中..
FirebaseConfiguration.shared.setLoggerLevel(.max)
FirebaseApp.configure()
// helps Analytics get going:
AnalyticsConfiguration.shared().setAnalyticsCollectionEnabled(true)
Run Code Online (Sandbox Code Playgroud)
同样,Firebase 实时和数据库自始至终都能完美运行。
所以使用Analytics.logEvent#...
请注意,这些项目完美地显示在 Xcode 控制台中:
2018-07-24 08:27:23.868 Blah[7501] <Debug> [Firebase/Analytics][I-ACS023105] Event is
not subject to real-time event count daily limit. Marking an event as
real-time. Event name, parameters: select_content, {
firebase_event_origin (_o) = app;
firebase_realtime (_r) = 1;
item_name = tapMyProfile;
firebase_screen_class (_sc) = Blah.SomeScreen;
firebase_debug (_dbg) = 1;
firebase_screen_id (_si) = 8314738347840858914;
item_id = Blah-tapMyProfile;
content_type = …Run Code Online (Sandbox Code Playgroud) 想象一下,十个简单的"立方体"的场景都是一样的.
它们各自具有相同的材料"M1",其具有简单的标准着色器,并且具有简单的PNG作为纹理.
如果你去材料,并调整平铺,
您可以方便地翻转纹理以获得不同的外观.
请注意,这当然会同时更改所有十个立方体.
是否可以修改标准着色器,简单地说,
在每个使用该材料的对象上
着色器随机更改平铺(例如,偏移)
再一次,我的意思是"每个对象" ; 在该示例中,十个中的每一个将随机地不同.
(所以:一个立方体会显示平铺-1,1,一个立方体会显示平铺-1,-1等等......每个立方体都不同,尽管所有立方体都使用相同的材料,只存在一种材料.)
注意,
(1)生成一些不同版本的材料是完全无关紧要的,每个版本都有不同的平铺,并为每个立方体随机选择其中一个.这不是要走的路
(2)请注意,如果您更改了材料,它当然会生成多个副本.你不可能有成千上万的材料.
解决方案是让(一个)着色器知道在着色器内部的每个对象上改变(例如,随机地)偏移量. (即基于每个特定对象)
这就是我在这里问的问题.
孩子能看到控制者"解雇自己吗?" .....
你有一个视图控制器"RedMessage".你有一个普通的强大财产......
@property(强)RedMessage*红色;
你在当前的VC上添加它("模态")...
self.red = (RedMessage *)[self.storyboard
instantiateViewControllerWithIdentifier:@"RedMessageID"];
self.red.view.frame = self.view.frame;
[self.view addSubview:self.red.view];
[self addChildViewController:self.red];
[self.red didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)
要在以后摆脱它,请执行此操作
[self.red willMoveToParentViewController:nil];
[self.red.view removeFromSuperview];
[self.red removeFromParentViewController];
Run Code Online (Sandbox Code Playgroud)
但事实上,你需要这样做吗?
[rm willMoveToParentViewController:nil];
[rm.view removeFromSuperview];
[rm removeFromParentViewController];
rm = nil;
Run Code Online (Sandbox Code Playgroud)
你需要"=零;" ?
请注意,这个问题很关键,因为:如果你没有必须这样做,你可以在新的视图控制器中执行以下操作...
-(void)dismissMyselfCompletely
{
[self willMoveToParentViewController:nil];
[self.view removeFromSuperview];
[self removeFromParentViewController];
}
Run Code Online (Sandbox Code Playgroud)
哪个非常方便.
简而言之,如果您在新的顶视图控制器中执行此操作 - 它是否"工作",它是否会释放VC?
当removeFromParentViewController发生时,父VC是否理解它可以释放self.red?
这个看似简单的问题没有引起人们的注意,获得巨额赏金.
在现代iOS(2017)中,
这实际上是我知道将图像保存到iOS照片系统的唯一方法,并获取文件名/路径.
import UIKit
import Photos
func saveTheImage... () {
UIImageWriteToSavedPhotosAlbum(yourUIImage, self,
#selector(Images.image(_:didFinishSavingWithError:contextInfo:)),
nil)
}
func image(_ image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) {
guard error == nil else {
print("Couldn't save the image!")
return
}
doGetFileName()
}
func doGetFileName() {
let fo: PHFetchOptions = PHFetchOptions()
fo.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
let r = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: fo)
if let mostRecentThingy = r.firstObject {
PHImageManager.default().requestImageData(
for: mostRecentThingy,
options: PHImageRequestOptions(),
resultHandler: { (imagedata, dataUTI, …Run Code Online (Sandbox Code Playgroud) ios ×5
image ×2
ios7 ×2
iphone ×2
shader ×2
cocoa-touch ×1
ios10 ×1
nib ×1
rotation ×1
uiscrollview ×1
uitableview ×1
uitoolbar ×1
uiview ×1