小编nwa*_*les的帖子

Swift委托 - 何时在委托上使用弱指针

有人可以解释何时何时不对Swift中的委托指针使用"弱"赋值,为什么?

我的理解是,如果你使用一个未定义为类的协议,你不能也不想将你的委托指针指向weak.

protocol MyStructProtocol{
    //whatever
}

struct MyStruct {
    var delegate: MyStructProtocol?
}
Run Code Online (Sandbox Code Playgroud)

但是,当您的协议被定义为类类型协议时,您是否要将您的委托设置为弱指针?

protocol MyClassProtocol:Class{
    //whatever
}

class MyClass {
    weak var delegate: MyClassProtocol?
}
Run Code Online (Sandbox Code Playgroud)

我对么?在Apple的快速指南中,类协议示例并未使用弱分配,但在我的测试中,如果我的代表没有被弱引用,我会看到强大的引用周期.

delegates memory-leaks memory-management swift strong-reference-cycle

42
推荐指数
3
解决办法
2万
查看次数

如何使实例属性仅对子类swift可见

我试图在swift中声明一个实例属性,以便它只对它的类和子类可见.我相信这会被称为其他语言的受保护财产.有没有办法在Swift中实现这一目标?

access-control swift

36
推荐指数
2
解决办法
2万
查看次数

如何将ibOutlet从子视图链接到storyboard xcode中的自定义UIView类

我认为这张图片解释了一切.我有一个UIView的子类,我已经进入了类字段.我正在尝试在故事板和类实现之间连接ibOutlets.这不是给我一个错误,但它也不起作用.这是另一个xcode错误,还是我希望它以不会的方式工作?

在此输入图像描述

xcode interface-builder storyboard uiview iboutlet

13
推荐指数
1
解决办法
2704
查看次数

在viewboard中将view.bottom约束到superview.bottom而不是bottomLayoutGuide

在界面构建器中,它只允许我将子视图约束到底部布局指南,而不是超级视图.因为我有时在容器控制器设置中使用控制器作为子控制器,所以我真的想要限制到superview底部,而不是底部布局指南.

在此输入图像描述

xcode ios autolayout

11
推荐指数
2
解决办法
5165
查看次数

使用redux进行React-Navigation - 嵌套在TabNavigator中的StackNavigator中的后退按钮触发两个导航器中的后退操作

我有redux的反应导航设置.我的应用程序包含一个带有登录和内容屏幕的父TabBarNavigator.内容屏幕本身就是一个包含应用程序主导航的Stack Navigator.redux和navigators的所有其他方面都按预期工作,但StackNavigator上的默认后退按钮也会触发它的父TabBarNavigator返回.

这是预期的行为吗?我注意到,如果我在navigationOptions中定义headerLeft,它会按预期工作:

static navigationOptions = ({ navigation }) => {
    return {
      headerLeft: (
        <Button transparent onPress={() => { navigation.goBack(); }}><Text>Back</Text></Button>
      )
    };
  };
Run Code Online (Sandbox Code Playgroud)

Cam有谁解释是什么原因造成的?有没有办法让默认的stackNavigator后退按钮与redux一起使用?

react-native redux react-navigation

11
推荐指数
1
解决办法
927
查看次数

在ios中使用带有React Native(0.43.4)的cocoapods的正确方法是什么?

我已经挖掘了许多帖子试图使用cocoapods为本地ios库设置一个本机项目,但我不可避免地#import <React/RCTBundleURLProvider.h>在我的AppDelegate.m文件中的语句中丢失了一个错误的文件.

什么是使用反应原生的可可豆荚的正确方法?在这篇文章发表时,我目前的RN版本是0.43.4,而我正在使用Xcode 8.2.1.

这是我的过程,好奇我可能会出错:

1)在终端中,我使用创建一个新项目 react-native init TestProject

2)我pod init在该项目的ios目录中运行

3)我在podFile中添加了一个依赖项并运行 pod install

4)安装过程成功,但我看到一个警告我的目标override the 'OTHER_LDFLAGS'并且它建议我$(inherit)在Xcode中的链接器标志中使用.

5)因此,基于此SO帖子,我添加$(inherited)Project> TestProject> BuildSettings> links> Other Linker Flags,否则为空.我还检查并发现它$(inherited)已经存在于目标>测试项目>构建设置>链接>其他链接器标志和预处理器宏中.

6)此时我在语句中看到React/RCTBundleURLProvider.h文件未找到错误#import <React/RCTBundleURLProvider.h>AppDelegate.m

7)基于此SO帖子,我尝试删除node modules目录并返回终端运行npm install并完成'react-native upgrade'.当它问我是否要替换AppDelegate.mproject.pbxproj文件,我说是的.

8)回到xCode我清理我的构建但仍然有步骤6导入的错误 <React/RCTBundleURLProvider.h>

ios cocoapods react-native

10
推荐指数
1
解决办法
4178
查看次数

UIImageView.layer.cornerRadius的问题是在不同的像素密度ios上创建圆角图像

我只是想创造一个完美的圆形图像.这是我的快速代码:

myImage.layer.cornerRadius = myImage.frame.size.width/2
myImage.layer.masksToBounds = true
Run Code Online (Sandbox Code Playgroud)

这适用于4s,但在5s上不是很圆,并且在iphone 6上显示为圆角矩形.

我假设这与frame.size.width有关,以像素为单位返回值而不是像这样的东西,但我一直无法解决这个问题.

frame cornerradius ios iphone-6

9
推荐指数
1
解决办法
8828
查看次数

NSURLSession URLSessionDidFinishEventsForBackgroundURLSession处理程序从未调用ios 8.确定在ios 7中

我有NSURLSession正在下载多个文件.我正在为ios 8更新ios 7应用程序.它在ios 7中工作正常,但是当符合ios 8时代表meathod

URLSessionDidFinishEventsForBackgroundURLSession: 
Run Code Online (Sandbox Code Playgroud)

永远不会被称为.

我挖得更深一些

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
Run Code Online (Sandbox Code Playgroud)

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
Run Code Online (Sandbox Code Playgroud)

委托meathods我正在检查剩余下载任务的会话:

[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks){ ...}
Run Code Online (Sandbox Code Playgroud)

在最后一个委托meathod上,在downloadTasks数组中总会有一个元素重新出现.奇怪的是,此下载任务并不总是引用同一文件,并且该任务的状态显示下载已完成.

再次,在ios7中工作正常.仅在ios 8中出现问题.

nsurlsession nsurlsessiondownloadtask ios8

7
推荐指数
1
解决办法
2105
查看次数

CIPerspectiveCorrection过滤器返回图像翻转和反转

我正在使用CIPerspectiveCorrection Filter,我的问题是我返回的图像结果是镜像的,颠倒的,用于透视校正的点似乎是引用了错误的轴或轴方向.

为了隔离这个问题,我一直在使用1024 x 1024的测试图像,并且我正在通过一个完美的矩形区域.我仍然在垂直和水平翻转图像.

这是我的函数,它给出一个图像和一组点返回一个裁剪的CIImage实例:

 private func _getCroppedImageWithImage(image:CIImage, topLeft:CGPoint, topRight:CGPoint, botLeft:CGPoint, botRight:CGPoint) -> CIImage {
    var rectCoords = NSMutableDictionary(capacity: 4)
    rectCoords["inputTopLeft"] = CIVector(CGPoint:topLeft)
    rectCoords["inputTopRight"] = CIVector(CGPoint:topRight)
    rectCoords["inputBottomLeft"] = CIVector(CGPoint:botLeft)
    rectCoords["inputBottomRight"] = CIVector(CGPoint:botRight)
    return image.imageByApplyingFilter("CIPerspectiveCorrection", withInputParameters: rectCoords)
}
Run Code Online (Sandbox Code Playgroud)

这是我调用此函数的地方:

func testCrop() {

    let ciInputImage = CIImage(image:UIImage(named:"test-pattern.jpg")!)

    println("source image is \(ciInputImage)") //<CIImage: 0x170212290 extent [0 0 1024 1024]>

    let ptBotLeft = CGPointMake(32.0,992.0)
    let ptBotRight = CGPointMake(992.0,992.0)
    let ptTopRight = CGPointMake(992.0,32.0)
    let ptTopLeft = CGPointMake(32.0,32.0)

    let croppedImage = _getCroppedImageWithImage(ciInputImage, topLeft: …
Run Code Online (Sandbox Code Playgroud)

core-image ios cifilter swift

7
推荐指数
1
解决办法
3056
查看次数

使用带有lineSpacing的AttributedText的多行UILabel会在iphone 6+和7+上添加不需要的偏移量

我有一个带有属性文本的UILabel,其中包含特定的lineSpacing或lineHeightMultiple.

let titleParagraphStyle = NSMutableParagraphStyle()
//titleParagraphStyle.lineSpacing = lineSpacing
titleParagraphStyle.lineHeightMultiple = 1.5
titleParagraphStyle.alignment = .left

let titleAttributes = [NSForegroundColorAttributeName: color,
                                   NSFontAttributeName: UIFont(name: fontName, size: fontSize)!,
                                   NSParagraphStyleAttributeName : titleParagraphStyle] as [String : Any]

let titleAttrString = NSAttributedString(string:string, attributes: titleAttributes)

var label = BetterUILabel() 
label.numberOfLines = 0       
label.attributedText = titleAttrString
label.setNeedsLayout() //I'm trying everything
label.layoutIfNeeded()
label.sizeToFit()
Run Code Online (Sandbox Code Playgroud)

BetterUILabel是UILabel的子类,修复了perferredMaxLayoutWidth

class BetterUILabel: UILabel {

    override public func layoutSubviews(){
        super.layoutSubviews()
        self.preferredMaxLayoutWidth = self.bounds.width
        super.layoutSubviews()
    }

    override public var bounds: CGRect
        {
        didSet
        {
            self.preferredMaxLayoutWidth = self.bounds.width
        } …
Run Code Online (Sandbox Code Playgroud)

uilabel ios autolayout uistackview

5
推荐指数
0
解决办法
280
查看次数