Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIView transitionWIthView简单更改图像动画—;如何明确提及‘;自我’;_Ios_Objective C - Fatal编程技术网

Ios UIView transitionWIthView简单更改图像动画—;如何明确提及‘;自我’;

Ios UIView transitionWIthView简单更改图像动画—;如何明确提及‘;自我’;,ios,objective-c,Ios,Objective C,背景 我有一个大约八年前在ObjectiveC中编写的iPhone应用程序,它运行得很好。然而,自从我上次更新它(或者确实做了任何iOS工作)已经五年了,苹果威胁说除非我提交更新,否则将把它从应用商店中扔掉。它对利基受众是有用的,我希望保持它在那里。我已经设法处理了大多数提出的“问题”(不推荐的方法等),但有一个关于图像翻转动画的“语义问题”,我似乎找不到答案 语义问题 块隐式保留“self”;明确提及“自我”,表明这是预期行为 生成此问题的代码 我已经标记了Xcode标记的两行代码⌫ if (

背景

我有一个大约八年前在ObjectiveC中编写的iPhone应用程序,它运行得很好。然而,自从我上次更新它(或者确实做了任何iOS工作)已经五年了,苹果威胁说除非我提交更新,否则将把它从应用商店中扔掉。它对利基受众是有用的,我希望保持它在那里。我已经设法处理了大多数提出的“问题”(不推荐的方法等),但有一个关于图像翻转动画的“语义问题”,我似乎找不到答案

语义问题

块隐式保留“self”;明确提及“自我”,表明这是预期行为

生成此问题的代码

我已经标记了Xcode标记的两行代码⌫

if (segControl.selectedSegmentIndex == 0)
{
    [UIView transitionWithView:pictureView
                        duration:0.5
                        options:UIViewAnimationOptionTransitionFlipFromRight
                        animations:^{ pictureView.image = image;}  ⌫
                        completion:nil];
}
else
{
    [UIView transitionWithView:pictureView
                        duration:0.5
                        options:UIViewAnimationOptionTransitionFlipFromRight
                        animations:^{ pictureView.image = digImage;}   ⌫
                        completion:nil];
}
pictureView
是UIView,它是与IBOutlet关联的类的实例变量

此代码块包含在方法
(iAction)changeSegment
中,该方法首先将两个UIimages
image
digImage
初始化为适合实例的一对JPG

这个想法很明显,我确信,就是在录制图片时,查看与之相关的图像(最初是一张照片)被翻转(到相应的图表);再次点击它时,它会被翻转回来

我不记得我最初从哪里得到的代码(正如我所说的,它可以工作),但是动画部分与我在网上和网上找到的示例不同。我试着把“self”放在我能想到的任何地方,但是,我并不真正理解这个问题,所以对失败并不感到惊讶

问题


那么我该如何修改这段代码来“显式地提到自己”

隐式地表示,编写的
pictureView.image=image但将编译为:
self.pictureView.image=image


因此,只需将其替换为如何编译,以确保编译器知道您正在块内传递
self
,并且您不关心传递块内self可能导致的retain cycled。

此外,苹果建议现在不要直接访问IVAR,您应该使用属性。Ivar应仅在以下情况下使用:initializers@Cy-4AH在这种情况下,我该怎么做?有什么建议吗?@Cy-4AH。我想我现在明白了,正如我在回复你对答案的评论时所解释的。谢谢你的建议。我试过了,但出现了一个错误:在类型为“GroundsDetailViewController*”的对象上找不到属性“pictureView”;是否要访问实例变量“pictureView”。GroundsDetailViewController是类。@David您可以使用
self->pictureView
语法访问IVAR,但更好的方法是在classesAh中添加属性。。。现在把一些蜘蛛网吹掉了。通过将“pictureView.image=img;”传输到setImage()方法,然后在transitionWithView:pictureView动画中调用[self-setImage:image],解决了此问题;我认为这是一个属性,正如你在对我的问题的评论中所建议的那样。